gpt4 book ai didi

r - 按索引将多个列值粘贴在一起

转载 作者:行者123 更新时间:2023-12-02 17:58:26 25 4
gpt4 key购买 nike

我需要在数据表中创建一个名为“组合”的列,其中包含从第 4 列到数据表末尾的所有列值。我将在多个数据表中使用这行代码,并且各个数据表的列数会有所不同,因此我并不总是知道最后一列的索引号。开头始终是第 4 列。

我知道有些函数使用多个列名可以正常工作,但不能使用多个列索引。有谁知道该怎么做吗?

使用列名而不是列索引的示例:

mycols<-c("apple", "orange", "banana")
data[, combinations:=paste(mycols, sep=", ")]

我尝试使用不起作用的列索引的示例:

ncols<-ncol(data)
my_cols <- data[ , c(4:ncols)]
data[, combinations:=paste(mycols, sep=", ")]

示例数据

id  number  day apple  orange  banana  
1 35 2 red orange yellow
2 12 3 red NA yellow
3 47 5 NA orange yellow

我想要实现的最终结果

id  number  day apple  orange  banana  combinations
1 35 2 red orange yellow red, orange, yellow
2 12 3 red NA yellow red, NA, yellow
3 47 5 NA orange yellow NA, orange, yellow

最佳答案

我们可能需要do.call

library(data.table)
data[, combinations := do.call(paste, c(.SD, sep = ", ")), .SDcols = 4:ncols]

-输出

> data
id number day apple orange banana combinations
1: 1 35 2 red orange yellow red, orange, yellow
2: 2 12 3 red <NA> yellow red, NA, yellow
3: 3 47 5 <NA> orange yellow NA, orange, yellow

或者使用unite,它可以通过na.rm = TRUE删除NA元素

library(dplyr)
library(tidyr)
data %>%
unite(combinations, all_of(4:ncols), sep = ", ", na.rm = TRUE, remove = FALSE)

-输出

    id number day        combinations apple orange banana
1: 1 35 2 red, orange, yellow red orange yellow
2: 2 12 3 red, yellow red <NA> yellow
3: 3 47 5 orange, yellow <NA> orange yellow

数据

data <- structure(list(id = 1:3, number = c(35L, 12L, 47L), day = c(2L, 
3L, 5L), apple = c("red", "red", NA), orange = c("orange", NA,
"orange"), banana = c("yellow", "yellow", "yellow")),
class = "data.frame", row.names = c(NA,
-3L))
setDT(data)

关于r - 按索引将多个列值粘贴在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75062026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com