【问题标题】:Merge values in dataframe columns to create new column of lists合并数据框列中的值以创建新的列表列
【发布时间】:2019-07-19 08:24:19
【问题描述】:

我有一个包含大约 100 列的数据框。我想将前 29 列中的值合并到一个列表中。因此,应该创建一个新列,其中每一行都包含一个值列表。诀窍是前 29 列中通常有空单元格,因此有时列表将包含 5 个元素,有时包含 7 个元素、20 个元素等。

虚拟数据框示例:

   one = c(2.34, 3.345, 5.345) 
   two = c(2354.2, 5234.23, 43) 
   three = c(2643, 434.34, 5.345) 
   df = data.frame(one, two , three)

所需变量:

   ([2.34, 2354.2, 2643], [3.345, 5234.23, 434.340], [5.345, 43.00, 5.345])

【问题讨论】:

  • 可能类似于:apply(df, 1, toString)NAs -- 可能是:apply(df, 1, function(x) { toString(Filter(function(f) !is.na(f), x)) } )
  • 如果您可以更新您的示例和所需的输出以涵盖 “有时列表将包含 5 个元素,有时包含 7 个元素,20 个元素”的情况,那就太好了 ;不清楚。

标签: r list dataframe merge


【解决方案1】:
lapply(1:nrow(df), function(x) unname(df[x, ]))
# [[1]]
#                   
# 1 2.34 2354.2 2643
# 
# [[2]]
#                       
# 2 3.345 5234.23 434.34
# 
# [[3]]
#                 
# 3 5.345 43 5.345

【讨论】:

  • 谢谢,如果我希望每一行对应一个值的向量而不是一个列表呢?
  • 没有行,这是一个向量列表。您只是在寻找t(df) 吗?也许您可以澄清您正在寻找的输出?以有效的 R 语法提供它? ([2.34, 2354.2, 2643], [3.345, 5234.23, 434.340], [5.345, 43.00, 5.345]) 不是很清楚。
  • 我也不明白你所说的“有时列表将包含 5 个元素,有时是 7 个元素,20 个元素”是什么意思,这似乎没有反映在您的示例数据,也不是您对“行”输出的渴望。
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 2015-04-21
  • 2015-06-25
  • 2022-11-30
  • 2018-09-17
  • 2016-12-25
  • 1970-01-01
  • 2018-04-17
相关资源
最近更新 更多