将向量合并为 df,并将向量名称转换为新列的行

Posted

技术标签:

【中文标题】将向量合并为 df,并将向量名称转换为新列的行【英文标题】:combine vectors into df, and turn vector names into rows of a new column 【发布时间】:2022-01-02 18:20:53 【问题描述】:

我想将 N 个向量组合成一个数据框,其中包含一列,其中的值是原始向量的名称。例如,假设我有这三个向量:

fruits <- c('apple', 'pear', 'banana', 'raspberry')
vehicles <- c('cars', 'bikes', 'buses', 'trains')
weather <- c('sunny', 'windy', 'rainy', 'cloudy', 'cold', 'hot')

通过使用 tidyverse 中的 enframe,我可以达到我想要的一半。例如

enframe(c(fruits, vehicles, weather), name = "name", value = "value")

# A tibble: 14 × 2
    name value    
   <int> <chr>    
 1     1 apple    
 2     2 pear     
 3     3 banana   
 4     4 raspberry
 5     5 cars     
 6     6 bikes    
 7     7 buses    
 8     8 trains   
 9     9 sunny    
10    10 windy    
11    11 rainy    
12    12 cloudy   
13    13 cold     
14    14 hot     

但我现在想要的是一个新列,其中包含元素来自的三个向量的名称。例如

# A tibble: 14 × 2
    name value    
   <chr> <chr>    
  fruits apple    
  fruits pear     
  fruits banana   
  fruits raspberry
vehicles cars     
vehicles bikes    
vehicles buses    
vehicles trains   
 weather sunny    
 weather windy    
 weather rainy    
 weather cloudy   
 weather cold     
 weather hot     

有谁知道我如何做到这一点?

【问题讨论】:

这似乎是一个XY问题;确保您可以从您的环境中获取变量的名称,将它们存储在list 中,然后以能够重现您预期输出的方式绑定向量及其名称。但是,fruitsvehiclesweather 首先是如何生成的?与其拥有三个单独的向量(这很尴尬),不如将它们放在一个名为 list 的开头。这就是我要开始的地方...... 【参考方案1】:

您可以在mget 之后使用stack

stack(mget(c("fruits", "vehicles", "weather")))
#      values      ind
#1      apple   fruits
#2       pear   fruits
#3     banana   fruits
#4  raspberry   fruits
#5       cars vehicles
#6      bikes vehicles
#7      buses vehicles
#8     trains vehicles
#9      sunny  weather
#10     windy  weather
#11     rainy  weather
#12    cloudy  weather
#13      cold  weather
#14       hot  weather

【讨论】:

以上是关于将向量合并为 df,并将向量名称转换为新列的行的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pandas 列中的 JSON 数据转换为新列

如何将 Pandas DataFrame 中字典的字符串表示形式转换为新列?

将整数字符串转换为整数的2D向量

将列中的字符串集列表转换为新列

如何将两列csv转换为第二列的向量?

使用火花将每行中的值转换为新列