道歉,如果这很明显,我发现什么时候有索引或什么时候缺少列。但我不认为任何一方都会为此工作。通过将列与缺少数据的列表组合在一起制作数据框,strsplit,没有索引
实施例的数据:
df.test=data.frame(A=c("n,n,y,n" ,"t", "j,k,k")
,B=c("n,y,y,n" ,"" , "k,k,k")
,C=c("n,y,y,n,n","t", "j,k,j")
,D=c("" ,"" , "k,k,j")
)
df.test=lapply(df.test, function(x) as.character(x))
str(df.test) # looks similar to my data
List of 4
$ A: chr [1:3] "n,n,y,n" "t" "j,k,k"
$ B: chr [1:3] "n,y,y,n" "" "k,k,k"
$ C: chr [1:3] "n,y,y,n,n" "t" "j,k,j"
$ D: chr [1:3] "" "" "k,k,j"
我的目标是一个数据帧:
A B C D
n n n NA
n y y NA
y y y NA
n n n NA
t NA t NA
j k j k
k k k k
k k j j
我想列A为基准,但是它不具有唯一的值。但是,它具有每个列表允许的最大值(我希望这是有道理的)。因此,应删除C列表1中的第五个值,即n y y n n -> n y y n
。 此外,需要添加缺少的值(根据列A
缺失)。 C
中的额外值是来自其他软件的错误(我没有影响力)。除了那些额外的值,它们相互对应,例如t应该在同一行(如果存在)。
到目前为止我所做的最好的工作是制作一份载体列表,这些列表有不同的长度,所以我不能把它们放在一起,它们不对应。
df3=lapply(df.test, function(x) unlist(strsplit(x,',')))
str(df3)
List of 4
$ A: chr [1:8] "n" "n" "y" "n" ...
$ B: chr [1:7] "n" "y" "y" "n" ...
$ C: chr [1:9] "n" "y" "y" "n" ...
$ D: chr [1:3] "k" "k" "j"
哇。从这样的事情上来,我还有很长的路要走。处理示例数据和实际数据。我设法得到一个嵌套循环工作,但很高兴我不需要使用它。非常感谢。 – john