将两个相同的数据框列组合成 R 中的逗号分隔列
Combine two identical dataframe columns into comma seperated columns in R
我有两个结构相同的数据框(相同数量的行、列和相同的 headers)。我想做的是将两者组合成一个以逗号分隔的列的数据框。
我知道如何用这个虚拟数据框来做,但用在我自己的数据上会很麻烦。
这是我的虚拟数据框,我的 "real" 数据的 headers 是“1”、“2”、“3”等,而虚拟数据框的是 "X1"、"X2"、"X3" 等等
> data1
X1 X2 X3 X4
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
> data2
X1 X2 X3 X4
1 8 9 13 14
2 9 10 14 15
3 10 11 15 16
我想要什么:
>data3
new1 new2 new3 new4
1 1,8 2,9 3,13 4,14
2 2,9 3,10 4,14 5,15
3 3,10 4,11 5,15 6,16
我是如何设法得到这个输出的。但是,我认为对于大型数据集来说太麻烦了。:
data1<- data.frame('1'=1:3, '2'=2:4, '3'=3:5,'4'=4:6)
data2<- data.frame('1'=8:10, '2'=9:11, '3'=13:15,'4'=14:16)
names(data1) <- c("1a","2a","3a","4a")
names(data2) <- c("1b","2b","3b","4b")
data3<- cbind(data1,data2)
cols.1 <- c('1a','1b'); cols.2 <-c('2a','2b')
cols.3 <- c('3a','3b'); cols.4 <-c('4a','4b')
data3$new1 <- apply( data3[ , cols.1] , 1 , paste , collapse = "," )
data3$new2 <- apply( data3[ , cols.2] , 1 , paste , collapse = "," )
data3$new3 <- apply( data3[ , cols.3] , 1 , paste , collapse = "," )
data3$new4 <- apply( data3[ , cols.4] , 1 , paste , collapse = "," )
data3 <-data3[,c(9:12)]
有没有一种方法可以让我迭代它,或许使用 for 循环?任何帮助将不胜感激。
这些帖子有些相似:
相同的问题,但针对的是行而不是列:
how to convert column values into comma seperated row vlaues
类似,但不适用于我的大型数据集:
Paste multiple columns together
仅使用基础:
data1 <- data.frame(x1 = 1:3, x2 = 2:4, x3 = 3:5, x4 = 4:6)
data2 <- data.frame(x1 = 8:10, x2 = 9:11, x3 = 13:15, x4 = 14:16)
data3 <- mapply(function(x, y){paste(x,y, sep = ",")}, data1, data2)
data3 <- as.data.frame(data3)
x1 x2 x3 x4
1 1,8 2,9 3,13 4,14
2 2,9 3,10 4,14 5,15
3 3,10 4,11 5,15 6,16
这是一个基本的 for 循环方法:
newdf = data.frame(matrix(ncol=ncol(data1),nrow=nrow(data1)))
for (i in 1:ncol(data1)) {
newdf[,i] = paste(data1[,i], data2[,i], sep=",")
}
#> newdf
# X1 X2 X3 X4
# 1 1,8 2,9 3,13 4,14
# 2 2,9 3,10 4,14 5,15
# 3 3,10 4,11 5,15 6,16
逐行解释:
初始化适当维度的新空数据框:
newdf = data.frame(matrix(ncol=ncol(data1),nrow=nrow(data1)))
遍历 1,2,..n 列并用 paste
结果填充每一列:
for (i in 1:ncol(data1)) {
newdf[,i] = paste(data1[,i], data2[,i], sep=",")
}
免责声明,这在大型数据集上可能会非常慢 - 如果您有兴趣学习,dplyr
或 data.frame
方法(可能还有一些 v/s/apply*()
语句)会更快那些方法。
我有两个结构相同的数据框(相同数量的行、列和相同的 headers)。我想做的是将两者组合成一个以逗号分隔的列的数据框。
我知道如何用这个虚拟数据框来做,但用在我自己的数据上会很麻烦。
这是我的虚拟数据框,我的 "real" 数据的 headers 是“1”、“2”、“3”等,而虚拟数据框的是 "X1"、"X2"、"X3" 等等
> data1
X1 X2 X3 X4
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
> data2
X1 X2 X3 X4
1 8 9 13 14
2 9 10 14 15
3 10 11 15 16
我想要什么:
>data3
new1 new2 new3 new4
1 1,8 2,9 3,13 4,14
2 2,9 3,10 4,14 5,15
3 3,10 4,11 5,15 6,16
我是如何设法得到这个输出的。但是,我认为对于大型数据集来说太麻烦了。:
data1<- data.frame('1'=1:3, '2'=2:4, '3'=3:5,'4'=4:6)
data2<- data.frame('1'=8:10, '2'=9:11, '3'=13:15,'4'=14:16)
names(data1) <- c("1a","2a","3a","4a")
names(data2) <- c("1b","2b","3b","4b")
data3<- cbind(data1,data2)
cols.1 <- c('1a','1b'); cols.2 <-c('2a','2b')
cols.3 <- c('3a','3b'); cols.4 <-c('4a','4b')
data3$new1 <- apply( data3[ , cols.1] , 1 , paste , collapse = "," )
data3$new2 <- apply( data3[ , cols.2] , 1 , paste , collapse = "," )
data3$new3 <- apply( data3[ , cols.3] , 1 , paste , collapse = "," )
data3$new4 <- apply( data3[ , cols.4] , 1 , paste , collapse = "," )
data3 <-data3[,c(9:12)]
有没有一种方法可以让我迭代它,或许使用 for 循环?任何帮助将不胜感激。
这些帖子有些相似:
相同的问题,但针对的是行而不是列: how to convert column values into comma seperated row vlaues
类似,但不适用于我的大型数据集: Paste multiple columns together
仅使用基础:
data1 <- data.frame(x1 = 1:3, x2 = 2:4, x3 = 3:5, x4 = 4:6)
data2 <- data.frame(x1 = 8:10, x2 = 9:11, x3 = 13:15, x4 = 14:16)
data3 <- mapply(function(x, y){paste(x,y, sep = ",")}, data1, data2)
data3 <- as.data.frame(data3)
x1 x2 x3 x4
1 1,8 2,9 3,13 4,14
2 2,9 3,10 4,14 5,15
3 3,10 4,11 5,15 6,16
这是一个基本的 for 循环方法:
newdf = data.frame(matrix(ncol=ncol(data1),nrow=nrow(data1)))
for (i in 1:ncol(data1)) {
newdf[,i] = paste(data1[,i], data2[,i], sep=",")
}
#> newdf
# X1 X2 X3 X4
# 1 1,8 2,9 3,13 4,14
# 2 2,9 3,10 4,14 5,15
# 3 3,10 4,11 5,15 6,16
逐行解释:
初始化适当维度的新空数据框:
newdf = data.frame(matrix(ncol=ncol(data1),nrow=nrow(data1)))
遍历 1,2,..n 列并用 paste
结果填充每一列:
for (i in 1:ncol(data1)) {
newdf[,i] = paste(data1[,i], data2[,i], sep=",")
}
免责声明,这在大型数据集上可能会非常慢 - 如果您有兴趣学习,dplyr
或 data.frame
方法(可能还有一些 v/s/apply*()
语句)会更快那些方法。