如何解决在R数据帧中将单元格中的多行折叠为单列
我想执行septal_rows()的反函数。即:
# Create example data
data <- data.frame(x1 = c(1,1,3,5),x2 = c('A','A','C','E'),x3 = 6:10)
data
结果
x1 x2 x3
1 1 A 6
2 1 A 7
3 3 C 8
4 3 C 9
5 5 E 10
不知何故,我希望在tidyr或dplyr中使用unite_rows()函数来做到这一点:
x1 x2 x3
1 1 A 6,7
3 3 C 8,9
5 5 E 10
但是我找不到任何类似的东西。我应该使用unite()合并cel吗? (这似乎是一种肮脏的方式)
unite(data,x2,x3,col = "x3",sep = ",")
解决方法
使用dplyr的摘要制作一个嵌套的数字矢量(即,不将数字转换为字符矢量):
data %>%
group_by(x1,x2) %>%
summarise(x3 = list(x3))
# A tibble: 3 x 3
x1 x2 x3
<dbl> <chr> <list>
1 1 A <int [2]>
2 3 C <int [2]>
3 5 E <int [1]>
,
尝试这种base R
方法:
#Code
data <- aggregate(x3~x1+x2,data,function(x) paste0(x,collapse = ','))
输出:
x1 x2 x3
1 1 A 6,7
2 3 C 8,9
3 5 E 10
,
您可以使用dplyr
来进行这种尝试,在处理大数据且值重复时使用unique
。
library(dplyr)
data %>%
group_by(x2) %>%
mutate(x3 = paste0(unique(x3),collapse = ",")) %>%
slice(1) %>%
ungroup()
# x1 x2 x3
# <dbl> <chr> <chr>
# 1 1 A 6,7
# 2 3 C 8,9
# 3 5 E 10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。