如何在for循环中合并列?
how to merge columns in a for loop?
我有一个小问题,在尝试使用粘贴合并列时,我合并了第一列和 for 循环的最后一个结果。告诉我如何合并 for 循环的所有结果,而不仅仅是最后一个?
if(i==1 | j==2){
common.res <- data.table(res[,3])
f <- data.table(paste(common.res1[,1],common.res[,]))
}
我的数据:
x1
x2
x3
20
30
40
20
30
40
20
30
40
将柱子固定在环中后会得到什么:
x1
20 40
20 40
20 40
我想得到的:
x1
20 30 40
20 30 40
20 30 40
您可以在没有 for 循环的情况下使用 tidyr::unite()
:
library(tidyr)
res %>% unite(col = 'name_for_new_col', sep = ' ')
这会将 res
中的所有列粘贴在一起,并在每个元素之间放置一个 space。如果您想指定特定的列来执行此操作,您可以说:
res %>% unite(col = 'name_for_new_col', x1:x3, sep = ' ')
如果您还想保留旧列,您可以在 unite()
.
中指定 remove = FALSE
或者,您可以使用 apply
和 paste
:
在 base R 中执行此操作
res2 <- as.data.frame(apply(res, 1, paste, collapse = ' '))
names(res2)[1] <- 'nicer.name' #rename the single column
或者只有 paste
和一个 for loop
:
df = data.frame(matrix(nrow = nrow(res), ncol = 1))
for (i in 1:nrow(res)) {
df[i,1] <- (paste(res[i,], collapse = ' '))
}
我有一个小问题,在尝试使用粘贴合并列时,我合并了第一列和 for 循环的最后一个结果。告诉我如何合并 for 循环的所有结果,而不仅仅是最后一个?
if(i==1 | j==2){
common.res <- data.table(res[,3])
f <- data.table(paste(common.res1[,1],common.res[,]))
}
我的数据:
x1 | x2 | x3 |
---|---|---|
20 | 30 | 40 |
20 | 30 | 40 |
20 | 30 | 40 |
将柱子固定在环中后会得到什么:
x1 |
---|
20 40 |
20 40 |
20 40 |
我想得到的:
x1 |
---|
20 30 40 |
20 30 40 |
20 30 40 |
您可以在没有 for 循环的情况下使用 tidyr::unite()
:
library(tidyr)
res %>% unite(col = 'name_for_new_col', sep = ' ')
这会将 res
中的所有列粘贴在一起,并在每个元素之间放置一个 space。如果您想指定特定的列来执行此操作,您可以说:
res %>% unite(col = 'name_for_new_col', x1:x3, sep = ' ')
如果您还想保留旧列,您可以在 unite()
.
remove = FALSE
或者,您可以使用 apply
和 paste
:
res2 <- as.data.frame(apply(res, 1, paste, collapse = ' '))
names(res2)[1] <- 'nicer.name' #rename the single column
或者只有 paste
和一个 for loop
:
df = data.frame(matrix(nrow = nrow(res), ncol = 1))
for (i in 1:nrow(res)) {
df[i,1] <- (paste(res[i,], collapse = ' '))
}