每个观察结果有多行数据,其中一些行中填充了变量,但其他行中没有
Data with multiple rows per observations with variables populated in some but not other rows
所以我有这个数据框:
dat1 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=sample(18:30, n, replace=TRUE),
type=NA,
op=factor(paste0("op", 1:n)),
x=NA)
dat1
dat2 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=NA,
type=factor(paste0("type", 1:n)),
op=NA,
x=rnorm(n))
dat <- full_join(dat1,dat2) %>% arrange(id)
dat
id group age type op x
1 1 A 19 <NA> op1 NA
2 1 A NA type1 <NA> 0.18819303
3 2 B 29 <NA> op2 NA
4 2 B NA type2 <NA> 0.11916096
5 3 A 19 <NA> op3 NA
6 3 A NA type3 <NA> -0.02509255
7 4 B 28 <NA> op4 NA
8 4 B NA type4 <NA> 0.10807273
9 5 A 27 <NA> op5 NA
10 5 A NA type5 <NA> -0.48543524
11 6 B 26 <NA> op6 NA
12 6 B NA type6 <NA> -0.50421713
此数据集的每个观察值有多行,而一些变量存储在一行中,一些变量存储在另一行中。我喜欢以一种整洁的格式使用它,每个 id 只有一行。我可以过滤成两个数据框然后重新加入,但必须有更简单的方法。总结会起作用,但只适用于数字变量。
群固定id,不同群内id不相同
group_by(id) %>%
summarise_if(is.numeric, sum, na.rm=T)
data
看来一定有一个非常简单的解决方案,但我想不出来。感谢您的帮助!
从 answer by tmfmnk到一个类似的问题,你应该可以通过在最后添加这个代码块来解决这个问题:
dat <- dat %>%
group_by(id) %>%
summarize(across(everything(), ~ first(na.omit(.))))
dat
link 中的问题是仅针对数字的特例,但此代码块应该可以正常工作。
所以我有这个数据框:
dat1 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=sample(18:30, n, replace=TRUE),
type=NA,
op=factor(paste0("op", 1:n)),
x=NA)
dat1
dat2 <- data.frame(id=1:n,
group=rep(LETTERS[1:2], n/2),
age=NA,
type=factor(paste0("type", 1:n)),
op=NA,
x=rnorm(n))
dat <- full_join(dat1,dat2) %>% arrange(id)
dat
id group age type op x
1 1 A 19 <NA> op1 NA
2 1 A NA type1 <NA> 0.18819303
3 2 B 29 <NA> op2 NA
4 2 B NA type2 <NA> 0.11916096
5 3 A 19 <NA> op3 NA
6 3 A NA type3 <NA> -0.02509255
7 4 B 28 <NA> op4 NA
8 4 B NA type4 <NA> 0.10807273
9 5 A 27 <NA> op5 NA
10 5 A NA type5 <NA> -0.48543524
11 6 B 26 <NA> op6 NA
12 6 B NA type6 <NA> -0.50421713
此数据集的每个观察值有多行,而一些变量存储在一行中,一些变量存储在另一行中。我喜欢以一种整洁的格式使用它,每个 id 只有一行。我可以过滤成两个数据框然后重新加入,但必须有更简单的方法。总结会起作用,但只适用于数字变量。 群固定id,不同群内id不相同
group_by(id) %>%
summarise_if(is.numeric, sum, na.rm=T)
data
看来一定有一个非常简单的解决方案,但我想不出来。感谢您的帮助!
从
dat <- dat %>%
group_by(id) %>%
summarize(across(everything(), ~ first(na.omit(.))))
dat
link 中的问题是仅针对数字的特例,但此代码块应该可以正常工作。