根据另一个数据集的索引变量替换变量值
Replacing variable values based on index variable from another dataset
我有两个数据集,它们的个案数量不同,但变量数量相同。例如,这个:
test_data <- data.frame(
var_1 = rep(1, 10),
index = letters[1:10]
)
other_data <- data.frame(
var_1 = c(1, 1, 3, 4, 6, 1),
index = letters[1:6]
)
而我需要的是用other_data
中var_1
的值替换test_data
中var_1
中的值。所以最终结果看起来像这样:
> test_data
var_1 index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
我知道 dplyr
很适合处理关系数据,但我无法弄清楚它是 _join
函数之一,可以为我做这件事,还是其他什么?谢谢。
您可以使用合并:
merged <- merge( test_data, other_data, by = c('index'), all.x = TRUE )
merged$var <- ifelse( is.na( merged$var_1.y ) , merged$var_1.x, merged$var_1.y )
merged[ , c('var', 'index')]
var index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
只是为了添加另一个答案:
使用 Base R 和 match
.
test_data$var_1=other_data$var_1[match(test_data$index, other_data$index)]
test_data[is.na(test_data)] = 1
var_1 index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
这将匹配 index
下的值以从 other_data
中获取 var_1
的值,然后将 test_data
中的列 var_1
替换为结果值。
将生成 NA,因为 test_data
的 index
列中的因子(字母)多于 other_data
的 index
中的因子(字母)。那么我们用 1.
替换 NA 值
希望对您有所帮助。
我有两个数据集,它们的个案数量不同,但变量数量相同。例如,这个:
test_data <- data.frame(
var_1 = rep(1, 10),
index = letters[1:10]
)
other_data <- data.frame(
var_1 = c(1, 1, 3, 4, 6, 1),
index = letters[1:6]
)
而我需要的是用other_data
中var_1
的值替换test_data
中var_1
中的值。所以最终结果看起来像这样:
> test_data
var_1 index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
我知道 dplyr
很适合处理关系数据,但我无法弄清楚它是 _join
函数之一,可以为我做这件事,还是其他什么?谢谢。
您可以使用合并:
merged <- merge( test_data, other_data, by = c('index'), all.x = TRUE )
merged$var <- ifelse( is.na( merged$var_1.y ) , merged$var_1.x, merged$var_1.y )
merged[ , c('var', 'index')]
var index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
只是为了添加另一个答案:
使用 Base R 和 match
.
test_data$var_1=other_data$var_1[match(test_data$index, other_data$index)]
test_data[is.na(test_data)] = 1
var_1 index
1 1 a
2 1 b
3 3 c
4 4 d
5 6 e
6 1 f
7 1 g
8 1 h
9 1 i
10 1 j
这将匹配 index
下的值以从 other_data
中获取 var_1
的值,然后将 test_data
中的列 var_1
替换为结果值。
将生成 NA,因为 test_data
的 index
列中的因子(字母)多于 other_data
的 index
中的因子(字母)。那么我们用 1.
希望对您有所帮助。