首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对不同的变量使用应用

如何对不同的变量使用应用
EN

Stack Overflow用户
提问于 2019-03-19 03:48:29
回答 3查看 38关注 0票数 1

我有三个变量的名称,我需要将它们转换为一个由1和0组成的矩阵,每个名称都有列,其中1表示名称出现在5个变量中的任何位置,0表示没有出现。如下所示:

代码语言:javascript
运行
复制
Var1   Var2   Var3  
Name1  Name2  Name3
Name1  Name4  Name5
Name3  Name5  Name6
Name2  Name3  Name4

我需要这样的东西

代码语言:javascript
运行
复制
Name1 Name2 Name3 Name4 Name5 Name6
    1     1     1     0     0     0
    1     0     0     1     1     0
    0     0     1     0     1     1
    0     1     1     1     0     0

如果是单个名称和单个变量,我会使用transform(data, Name1 = ifelse(Var1 == "Name1", 1, 0)),但我不知道如何对所有名称和所有变量执行此操作。

EN

回答 3

Stack Overflow用户

发布于 2019-03-19 03:54:41

代码语言:javascript
运行
复制
nm = sort(unique(unlist(df1)))
data.frame(setNames(lapply(nm, function(x)
    rowSums(sapply(df1, function(d) as.numeric(d %in% x)))), nm))
#  Name1 Name2 Name3 Name4 Name5 Name6
#1     1     1     1     0     0     0
#2     1     0     0     1     1     0
#3     0     0     1     0     1     1
#4     0     1     1     1     0     0

代码语言:javascript
运行
复制
#DATA
df1 = structure(list(Var1 = c("Name1", "Name1", "Name3", "Name2"), 
                     Var2 = c("Name2", "Name4", "Name5", "Name3"),
                     Var3 = c("Name3", "Name5", "Name6", "Name4")),
                class = "data.frame", row.names = c(NA, -4L))
票数 0
EN

Stack Overflow用户

发布于 2019-03-19 04:05:19

您可以使用以下代码来实现这一点-

代码语言:javascript
运行
复制
data.table::setDT(df1)
df1 <- data.table::dcast(
    melt(df1[,rownm:=1:nrow(df1)], id.vars="rownm"), 
    rownm ~ value,
    length)


> df1[,-"rownm"]
   Name1 Name2 Name3 Name4 Name5 Name6
1:     1     1     1     0     0     0
2:     1     0     0     1     1     0
3:     0     0     1     0     1     1
4:     0     1     1     1     0     0
票数 0
EN

Stack Overflow用户

发布于 2019-03-19 04:12:55

一种tidyverse的可能性可能是:

代码语言:javascript
运行
复制
df %>%
 rowid_to_column() %>%
 gather(var, val, -rowid) %>%
 add_count(rowid, val) %>%
 select(-var) %>%
 spread(val, n, fill = 0) %>%
 ungroup %>%
 select(-rowid)

  Name1 Name2 Name3 Name4 Name5 Name6
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     1     1     0     0     0
2     1     0     0     1     1     0
3     0     0     1     0     1     1
4     0     1     1     1     0     0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55229029

复制
相关文章

相似问题

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