在数据框中创建有序列表

时间:2017-10-30 07:54:55

标签: r list while-loop

我有以下数据框:

col1 <- c("a", "b", "c")
col2 <- c("c", "a", "d")
col3 <- c("b", "c", "a")

df <- data.frame(col1,col2,col3)

我想在这个数据框中创建一个新列,对于每一行,列有列col1,col2,col3的有序列表。因此,对于第一行,它将是一个列表,如&#34; a&#34;,&#34; b&#34;,&#34; c&#34;。

我处理它的方法是创建一个循环,但由于我有50k行,因此效率很低,所以我正在寻找更好的解决方案。

rown <- nrow(df)
i = 0
while(i<rown){
  i = i +1
  col1 <- df$col1[i]
  col2 <- df$col2[i]
  col3 <- df$col3[i]

  col1 <- as.character(col1)
  col2 <- as.character(col2)
  col3 <- as.character(col3)

  list1 <- c(col1, col2, col3)

  list1 <- list1[order(sapply(list1, '[[', 1))]

  a <- list1[1]
  b <- list1[2]
  c <- list1[3]


  df$col.list[i] <- paste(a, b, c, sep = " ")


}

有关如何提高此代码效率的任何想法?

编辑:另一个问题与我的情况无关,因为我需要在排序每一行后粘贴三列,因此它是动态的粘贴语句,我不是要尝试更改数据框排序。

预期产出:

col1 col2 col3 col.list
a     c     b   a b c
b     a     c   a b c
c     d     a   a c d

0 个答案:

没有答案