r - 从其他列中取消列出数据框列保留信息

标签 r list dataframe

我有一个由两列组成的数据框:字符向量col1listcol2

myVector <- c("A","B","C","D")

myList <- list()
myList[[1]] <- c(1, 4, 6, 7)
myList[[2]] <- c(2, 7, 3)
myList[[3]] <- c(5, 5, 3, 9, 6)
myList[[4]] <- c(7, 9)

myDataFrame <- data.frame(row = c(1,2,3,4))

myDataFrame$col1 <- myVector
myDataFrame$col2 <- myList

myDataFrame
# row col1          col2
# 1   1    A    1, 4, 6, 7
# 2   2    B       2, 7, 3
# 3   3    C 5, 5, 3, 9, 6
# 4   4    D          7, 9


我想取消列出col2,但仍保留列表中向量的每个元素的col1中存储的信息。换句话说,在常用的数据框整形术语中:“宽”列表列应转换为“长”格式。

然后在一天结束时,我想要两个长度等于length(unlist(myDataFrame$col2))的向量。在代码中:

# unlist myList
unlist.col2 <- unlist(myDataFrame$col2)
unlist.col2
# [1] 1 4 6 7 2 7 3 5 5 3 9 6 7 9

# unlist myVector to obtain
# unlist.col1 <- ???
# unlist.col1
# [1] A A A A B B B C C C C C D D


我想不出任何简单的方法来获得它。

最佳答案

这里的想法是先使用sapply获取每个列表元素的长度,然后使用rep复制具有该col1length

 l1 <- sapply(myDataFrame$col2, length)
  unlist.col1 <- rep(myDataFrame$col1, l1)
  unlist.col1
 #[1] "A" "A" "A" "A" "B" "B" "B" "C" "C" "C" "C" "C" "D" "D"


或按照@Ananda Mahto的建议,也可以使用vapply

   with(myDataFrame, rep(col1, vapply(col2, length, 1L)))
  #[1] "A" "A" "A" "A" "B" "B" "B" "C" "C" "C" "C" "C" "D" "D"

关于r - 从其他列中取消列出数据框列保留信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194298/

相关文章:

list - RangeError(索引): Invalid value. 有效值范围为空:0

python - 如何在Python中将pandas数据框转换为矩阵格式?

javascript - 用 R 抓取 xml/javascript 表

r - 使用多个条件使用 dplyr 进行变异

r - 绘图图例条目显示/隐藏所有绘图字符

java - 如何根据映射中相似的键值前缀构建对象

c# - List<T>.InsertRange() 或设计决策中的错误?

python - 删除一个特定列上的重复项并添加一个新列作为重复记录的计数 pandas

python - 如何按其他值类型的组计算平均值?

r - 这是 mongolite 包中的错误吗?