我有一个看起来像这样的数据框:
library(tibble)
df_of_measures <-
tribble(~measure, ~meter, ~cubic_ft, ~milliliter, ~mile, ~kilogram, ~pound,
"volume", FALSE, TRUE, TRUE, FALSE, FALSE, FALSE,
"distance", TRUE, FALSE, FALSE, TRUE, FALSE, FALSE,
"mass", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE)
## measure meter cubic_ft milliliter mile kilogram pound
## <chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
## 1 volume FALSE TRUE TRUE FALSE FALSE FALSE
## 2 distance TRUE FALSE FALSE TRUE FALSE FALSE
## 3 mass FALSE FALSE FALSE FALSE TRUE TRUE
我想获取该measure
列并将其值与其他标头交叉,因此我仅获得用于TRUE
组合的向量:
[1] "volume_cubic_ft" "volume_milliliter" "distance_meter" "distance_mile" "mass_kilogram" "mass_pound"
如果我不希望以TRUE
或为条件来进行此类操作FALSE
,我会这样做:
as.vector(outer(df_of_measures$measure, names(df_of_measures)[-1], paste, sep="_"))
## [1] "volume_meter" "distance_meter" "mass_meter" "volume_cubic_ft" "distance_cubic_ft" "mass_cubic_ft"
## [7] "volume_milliliter" "distance_milliliter" "mass_milliliter" "volume_mile" "distance_mile" "mass_mile"
## [13] "volume_kilogram" "distance_kilogram" "mass_kilogram" "volume_pound" "distance_pound" "mass_pound"
如何仅使用TRUE
组合就可以得到向量?
下面是一个选项base R
,其中使用apply
与MARGIN = 1
遍历所有的行,得到了names
具有值TRUE和列paste
与第一列或第一个元素值
c( apply(df_of_measures, 1, function(x)
paste(x[1], names(x)[-1][as.logical(x[-1])], sep="_")))
-输出
#[1] "volume_cubic_ft" "volume_milliliter" "distance_meter"
#[4] "distance_mile" "mass_kilogram" "mass_pound"
或tidyverse
,重塑以“长”与格式pivot_longer
,filter
基于“价值”真值,并且unite
列measure
和name
library(dplyr)
library(tidyr)
df_of_measures %>%
pivot_longer(cols = -measure) %>%
filter(value) %>%
unite(measure, measure, name, sep="_") %>%
pull(measure)
#[1] "volume_cubic_ft" "volume_milliliter" "distance_meter"
#[4] "distance_mile" "mass_kilogram" "mass_pound"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句