首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中表的改进建议

R中表的改进建议
EN

Stack Overflow用户
提问于 2019-12-18 12:34:37
回答 2查看 35关注 0票数 0

我有一张桌子:

代码语言:javascript
复制
sample  tomato  zucchini    broccoli
a   x       x
b       x   
c   x       x

我想要这样做:

代码语言:javascript
复制
a   tomato
a   broccoli
b   zucchini
c   tomato
c   broccoli

你对R有什么建议吗?提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 12:43:57

我将使用来自tidyr包的tidyr(或者可能更简单的tidyverse)。

加载一些库:

代码语言:javascript
复制
library(tidyverse)

你的数据:

代码语言:javascript
复制
my_df <- tribble(
  ~sample,  ~tomato,  ~zucchini,    ~broccoli,
  "a",   "x",    NA,   "x",
  "b",    NA,   "x",   NA,
  "c",   "x",    NA,   "x",
)

代码:(基于注释@Ronak Shah更新)

代码语言:javascript
复制
my_df <- my_df %>% 
  # make table long format
  pivot_longer(cols = -sample,
               names_to = "vegy",
               values_to = "value",
               values_drop_na = TRUE) %>% 
  # get rid of value column
  select(-value)


my_df
# A tibble: 5 x 2
  sample vegy    
  <chr>  <chr>   
1 a      tomato  
2 a      broccoli
3 b      zucchini
4 c      tomato  
5 c      broccoli
票数 2
EN

Stack Overflow用户

发布于 2019-12-18 13:15:02

下面是使用base R的解决方案,其中apply()rep()是关键,即,

代码语言:javascript
复制
r <- apply(df, 1, function(v) names(v[-1])[which(v[-1] =="x")])
dfout <- data.frame(sample = rep(df$sample,lengths(r)),veg = unlist(r))

这样的话

代码语言:javascript
复制
> dfout
  sample      veg
1      a   tomato
2      a broccoli
3      b zucchini
4      c   tomato
5      c broccoli

数据

代码语言:javascript
复制
df <- structure(list(sample = structure(1:3, .Label = c("a", "b", "c"
), class = "factor"), tomato = structure(c(1L, NA, 1L), .Label = "x", class = "factor"), 
    zucchini = structure(c(NA, 1L, NA), .Label = "x", class = "factor"), 
    broccoli = structure(c(1L, NA, 1L), .Label = "x", class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))

> df
  sample tomato zucchini broccoli
1      a      x     <NA>        x
2      b   <NA>        x     <NA>
3      c      x     <NA>        x
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59392174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档