gpt4 book ai didi

r - 如果矢量长度不同,如何单独粘贴到列表中

转载 作者:行者123 更新时间:2023-12-04 08:56:28 27 4
gpt4 key购买 nike

我有一个关于如何使用 paste 的问题如果其向量长度不同,则在列表中起作用。我有一个包含不同长度列的数据框,例如:

df = data.frame(Set1=c("abc",'def',"ghi","jkl",""), Set2=c("abc",'def',"","",""), Set3=c("mno","pqr","stu","vwx","xyz"))
我试着列个 list a.list基于每一列并用 , 折叠每个因素.就像是
a.list

$Set1
[1] abc,def,ghi,jkl

$Set2
[1] abc,def

$Set3
[1] mno,pqr,stu,vwx,xyz
我试过
> a.list = apply(df, 2, as.list)
> a.list = lapply(a.list, function(x) paste(x, collapse=",")
然而,它用 , 折叠了这些因素。到列表的最大长度。例如,
a.list

$Set1
[1] "abc,def,ghi,jkl,"

$Set2
[1] "abc,def,,,"
抱歉,这可能是一个简单的问题。我还在学习 R。谢谢!

最佳答案

我们可以删除 ''setdiff使用 lapply 遍历列后,然后 paste其余元素( toString )。请注意 toString => paste(..., collapse=", ")

lapply(df, function(x) toString(setdiff(x, '')))
这假设有 unique列中的元素。如果有重复,使用 vsetdiff
library(vecsets)
lapply(df, function(x) toString(vsetdiff(x, '')))
或使用 nzchar
lapply(df, function(x) toString(x[nzchar(x)]))
#$Set1
#[1] "abc, def, ghi, jkl"

#$Set2
#[1] "abc, def"

#$Set3
#[1] "mno, pqr, stu, vwx, xyz"
此外,返回 vector 可能会更好。而不是 list作为 list 的每个元素是 length 1
sapply(df, function(x) toString(x[nzchar(x)]))

或使用 tidyverse
library(dplyr)
library(stringr)
df %>%
summarise(across(everything(), ~ str_c(.[nzchar(.)], collapse=",")))
注意:我们不需要使用 != 创建逻辑向量如 nzchar已经这样做了

关于r - 如果矢量长度不同,如何单独粘贴到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63802934/

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