如何将所有值(字符串)与所有其他标题一起粘贴到一个数据列中,以值和标题的组合为条件

艾曼

我有一个看起来像这样的数据框:

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,其中使用applyMARGIN = 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_longerfilter基于“价值”真值,并且unitemeasurename

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章