【发布时间】:2018-07-23 19:42:15
【问题描述】:
我想合并以下数据框中的行,以便每个 var1 中只有一个:
df1 <- data.frame(var1=c('a', 'a','b','c'), var2=c(1,2,3, 4), var3=c(2, NA, NA, 4), var4=c(4, 3, 2, 1))
var1 var2 var3 var4
1 a 1 2 4
2 a 2 NA 3
3 b 3 NA 2
4 c 4 4 1
大多数建议似乎是使用这样的东西:
df2 <- ddply(df1,"var1",fun = sum())
或者 group_by 可能是另一种解决方案。
不幸的是,我必须遵守两条规则:
1) 如果重复行有一个 NA 和一个数字,则保留该数字;
2) 如果重复行有两个数字,则随机选择一个数字保留。
所以结果数据应该是这样的:
var1 var2 var3 var4
1 a 2 2 4
2 b 3 NA 2
3 c 4 4 1
其中第 1 行 var2 可以是 1 或 2,第 1 行 var 4 可以是 3 或 4。
编辑:
Prem 的解决方案有时有效,但并非总是如此。我不理解代码的机制来解释为什么它并不总是有效,但是如果您多次运行以下示例,当需要一个值时,您最终会得到一个 NA 结果:
df1 <- data.frame(var1=c('a', 'a','a','c', 'c'), var2=c(1,2,3,4,NA), var3=c(2, NA, NA, NA,5), var4=c(4, 3, 2, NA,1))
library(dplyr)
#set.seed(1) #comment this to have random sample
df1 %>%
group_by(var1) %>%
fill(var2:var4, .direction = "down") %>%
sample_n(1)
var1 var2 var3 var4
1 a 1 2 4
2 a 2 NA 3
3 a 3 NA 2
4 c 4 NA NA
5 c NA 5 1
我经常得到以下正确的答案:
var1 var2 var3 var4
<fctr> <dbl> <dbl> <dbl>
1 a 3 2 2
2 c 4 5 1
但我有时也会得到以下不正确的信息:
var1 var2 var3 var4
<fctr> <dbl> <dbl> <dbl>
1 a 3 2 2
2 c 4 NA NA
【问题讨论】:
-
您想对其他变量值求和吗?还是随便拿一个?
-
当有两个值时随机取一个。当只有一个值时,取那个值。不重复的行不会改变。
-
df2
标签: r