如何在R中合并行
我有一个类似这样的大数据集如何在R中合并行,r,merge,R,Merge,我有一个类似这样的大数据集 ID | X2 | X3 | X4| 1 | abc| abc| abc| 1 | xyz| xyz| xyz| 2 | abc| abc| abc| 我想按id号组合这些行,就像如果它们是不同的数据帧,则使用merge,如下所示: ID | X1 | X2 | X3| X1.b| X2.b|X3.b| 1 | abc| abc| abc| xyz| xyz| xyz| 2 | abc| abc| abc| NA | NA | NA | 我尝试过重塑函数
ID | X2 | X3 | X4|
1 | abc| abc| abc|
1 | xyz| xyz| xyz|
2 | abc| abc| abc|
我想按id号组合这些行,就像如果它们是不同的数据帧,则使用merge,如下所示:
ID | X1 | X2 | X3| X1.b| X2.b|X3.b|
1 | abc| abc| abc| xyz| xyz| xyz|
2 | abc| abc| abc| NA | NA | NA |
我尝试过重塑函数,但它与timevar的工作方式不适合我的数据,我想
我很高兴听到别人的想法 使用dplyr和tidyr,我们可以获取长格式的数据,为每个ID和名称创建一个唯一的值,然后再次获取宽格式的数据
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -ID) %>%
group_by(ID, name) %>%
mutate(row = paste0(name, letters[row_number()])) %>%
ungroup() %>%
select(-name) %>%
pivot_wider(names_from = row, values_from = value)
# A tibble: 2 x 7
# ID X2a X3a X4a X2b X3b X4b
# <int> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 abc abc abc xyz xyz xyz
#2 2 abc abc abc NA NA NA
资料
在按ID创建序列列之后,我们可以直接在多个列上进行透视
library(dplyr)
library(tidyr)
df1 %>%
group_by(ID) %>%
mutate(rn = row_number()) %>%
ungroup %>%
pivot_wider(names_from = rn, values_from = c(X2, X3, X4), names_sep=".")
# A tibble: 2 x 7
# ID X2.1 X2.2 X3.1 X3.2 X4.1 X4.2
# <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 abc xyz abc xyz abc xyz
#2 2 abc <NA> abc <NA> abc <NA>
数据
你好数据集相当大,这带来了一些问题。1制造cX2、X3等有点麻烦,因为有几十个变量。2当我尝试运行此程序时,收到错误消息vector memory耗尽code@DanBromberg在新会话中尝试使用dcast。应该更快。您可以只输入value中的名称df1[2:4],而不必键入。对不起,有这么多问题;它表示它只接受字符或NULL类型。集合中还有其他类型的数据以及日期和整数@akrun@DanBromberg取决于您使用的方法。如果它是data.table,并且您还需要其他列,那么需要在公式表达式i中处理它,即ID+somecol~rowidd
library(dplyr)
library(tidyr)
df1 %>%
group_by(ID) %>%
mutate(rn = row_number()) %>%
ungroup %>%
pivot_wider(names_from = rn, values_from = c(X2, X3, X4), names_sep=".")
# A tibble: 2 x 7
# ID X2.1 X2.2 X3.1 X3.2 X4.1 X4.2
# <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 abc xyz abc xyz abc xyz
#2 2 abc <NA> abc <NA> abc <NA>
library(data.table)
dcast(setDT(df1), ID ~ rowid(ID), value.var = c("X2", "X3", "X4"), sep=".")
# ID X2.1 X2.2 X3.1 X3.2 X4.1 X4.2
#1: 1 abc xyz abc xyz abc xyz
#2: 2 abc <NA> abc <NA> abc <NA>
df1 <- structure(list(ID = c(1, 1, 2), X2 = c("abc", "xyz", "abc"),
X3 = c("abc", "xyz", "abc"), X4 = c("abc", "xyz", "abc")), class = "data.frame", row.names = c(NA,
-3L))