gpt4 book ai didi

r - 从另一个 data.frame 回填

转载 作者:行者123 更新时间:2023-12-04 10:36:05 25 4
gpt4 key购买 nike

我经常遇到必须从另一个数据源“填写”信息的情况。

例如:

x <- data.frame(c1=letters[1:26],c2=letters[26:1])
x[x$c1 == "m","c2"] <- NA
x[x$c1 == "a","c2"] <- NA

c1 c2
1 a <NA>
2 b y
3 c x
4 d w
5 e v
6 f u
7 g t
8 h s
9 i r
10 j q
11 k p
12 l o
13 m <NA>
...

现在,有了那个缺失的变量,我想检查并使用单独的 data.frame 填充它,我们称之为 y
y <- data.frame(c1=c("m","a"),c2=c("n","z"))

所以,我想要发生的是 x 用 y 填充。 (第 13 行应为 c("m","n"),第 1 行应为 c("a","z"))

我用来处理这个问题的方法目前似乎是复杂和间接的。你的方法是什么?请记住,我的数据不一定按照这样的顺序排列,但顺序应保持在 x 中。 .我的偏好是不依赖于除基础 R 之外的任何东西的解决方案。

最佳答案

如果您处理 character,这将是一个简单得多的提议。变量,而不是 factors .

我将介绍一个简单的data.table解决方案(优雅且易于使用的语法以及许多其他优点)

x <- data.frame(c1=letters[1:26],c2=letters[26:1], stringsAsFactors =FALSE)
x[x$c1 == "m","c2"] <- NA
y <- data.frame(c1="m",c2="n", stringsAsFactors = FALSE)
library(data.table)
X <- as.data.table(x)
Y <- as.data.table(y)

为了合并的简单起见,我将创建一个列,指示
X[,missing_c2 := is.na(c2)]
# a similar column in Y
Y[,missing_c2 := TRUE]

setkey(X, c2, missing_c2)
setkey(Y, c2, missing_c2)
# merge and replace (by reference) those values in X with the the values in `Y`
X[Y, c2 := i.c2]
i.c2意味着我们使用 c2 的值来自 i论据 [
此方法假定并非所有值都在 c1 = 'm'将在 X 中丢失并且您不想替换 c2 中的所有值与 'm'哪里 c1='m' ,只有那些缺失的

基础解决方案

这是一个基本的解决方案——我使用合并以便 y data.frame 可以包含更多 missing比实际需要的替换(即可以具有所有 c1 值的值,尽管只需要 c1= m`` 。
  # add a second missing value row because to make the solution more generalizable
x <- rbind(x, data.frame(c1 = 'm',c2 = NA, stringsAsFactors = FALSE) )
missing <- x[is.na(x$c2),]
merged <- merge(missing, y, by = 'c1')

x[is.na(x$c2),] <- with(merged, data.frame(c1 = c1, c2 = c2.y, stringsAsFactors = FALSE))

如果您使用 factors你会遇到一堵痛苦的墙,以确保级别对应。

关于r - 从另一个 data.frame 回填,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com