将向量合并为 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
中,然后以能够重现您预期输出的方式绑定向量及其名称。但是,fruits
、vehicles
和 weather
首先是如何生成的?与其拥有三个单独的向量(这很尴尬),不如将它们放在一个名为 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,并将向量名称转换为新列的行的主要内容,如果未能解决你的问题,请参考以下文章