我想问R社区如何合并具有相同ID的两行(即同一参与者),其中一些变量是相同的,而其他变量是NA' s。在我的例子中,我希望所有值4-5-6出现在一行上,因此NA(或空单元格)就会消失。
我尝试过使用dplyr但没有太大的成功,我必须手动合并(这非常耗时并且增加了出错的风险)。提前感谢您对此问题的帮助!
答案 0 :(得分:2)
1)使用下面的注释中定义的DF
,尝试使用下面定义的compress
函数进行聚合。此函数删除NA值并附加NA,以防所有值都被删除,然后取出剩余的第一个值。没有包使用。
compress <- function(x) c(na.omit(x), NA)[1]
aggregate(DF[5:7], DF[1:4], compress)
,并提供:
ID Value1 Value2 Value3 Value4 Value5 Value6
1 1 A B C x x x
2 2 A B C x x x
2)如果没有参与者在任何列中包含所有NA值,则更简单的替代方法是我们可以删除compress
的定义并使用max
na.rm = TRUE
而不是这样:
aggregate(DF[5:7], DF[1:4], max, na.rm = TRUE)
注意:可重复输入的输入:
Lines <- "ID Value1 Value2 Value3 Value4 Value5 Value6
1 A B C x x NA
1 A B C NA NA x
2 A B C NA x NA
2 A B C x NA x"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
答案 1 :(得分:2)
# Create sample data frame.
id <- c(rep('Participant 1', 2), rep('Participant 2', 2))
value1 <- rep('A', 4)
value2 <- rep('B', 4)
value3 <- rep('C', 4)
value4 <- c('x', NA, NA, 'x')
value5 <- c('x', NA, 'x', NA)
value6 <- c(NA, 'x', NA, 'x')
df <- data.frame(id, value1, value2, value3, value4, value5, value6, stringsAsFactors = F)
# Use dplyr to group the data and keep the non-NA value from the other columns.
df %>% group_by(id, value1, value2, value3) %>%
summarise(value4 = max(value4, na.rm = T),
value5 = max(value5, na.rm = T),
value6 = max(value6, na.rm = T))
答案 2 :(得分:1)
dplyr
和tidyr
的另一种解决方案:
library(dplyr)
library(tidyr)
DF %>%
gather(var, val, Value4:Value6) %>%
filter(!is.na(val)) %>%
spread(var, val)
使用@ G.Grothendieck的数据,结果如下:
ID Value1 Value2 Value3 Value4 Value5 Value6
1 1 A B C x x x
2 2 A B C x x x
使用@ {Grothendieck的summarise_each
方法max
的另一种变体:
DF %>%
group_by(ID, Value1, Value2, Value3) %>%
summarise_each(funs(max(., na.rm = TRUE)))
gather
和spread
选项也可以转换为reshape2
的解决方案:
library(reshape2)
dcast(na.omit(melt(DF, id.vars = c('ID','Value1','Value2','Value3'))),
ID + Value1 + Value2 + Value3 ~ variable,
value.var = 'value')
答案 3 :(得分:0)
如果您更喜欢使用library(dplyr)
DF %>%
group_by(ID, Value1, Value2, Value3) %>%
summarise_each(funs(toString(na.omit(.))))
,请尝试:
ID Value1 Value2 Value3 Value4 Value5 Value6
<int> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 A B C x x x
2 2 A B C x x x
<强>结果:强>
DF
注意:强>
webextension\manifest.json