r - 将单列中的信息转换为多列
问题描述
我在 R 中有一个数据框,其中一列中有一个代码子集。例如,
df <- data.frame(
x = 1:3,
y = c("a", "d,e,f", "g,h"),
stringsAsFactors = FALSE
)
我想最终得到一个数据框,其中第一列是键(“x”),然后是“a”,“b”,“c”的列,......其中每一行都有一个 1 或 0如果给定键值存在该值。我不知道我手头有多少这些变量。我努力了
n_vars <- df$y %>% str_split(",") %>% lappy(function(z) length(z)) %>% unlist() %>% max()
df <- separate(df, y, sep = ",", into = as.character(1:n_vars))
我不确定接下来的步骤是什么。任何帮助表示赞赏!
解决方案
看起来像是cSplit_e
from的完美案例splitstackshape
library(splitstackshape)
cSplit_e(df, "y", type = "character", fill = 0, drop = TRUE)
# x y_a y_d y_e y_f y_g y_h
#1 1 1 0 0 0 0 0
#2 2 0 1 1 1 0 0
#3 3 0 0 0 0 1 1
使用dplyr
and tidyr
,我们可以使用separate_rows
andspread
library(dplyr)
library(tidyr)
df %>%
separate_rows(y) %>%
mutate(n = 1) %>%
spread(y, n, fill = 0)
推荐阅读
- blazor - Blazors 运行时需要多久发送一次给客户端?
- php - 如何在每次执行时清除内存?
- azure - 安装测试corda节点时出现安装错误
- indexing - 如何最好地优化在 Oracle 11.2 中搜索自由形式 varchar 字符串的查询?
- ios - iOS 无法关闭视图控制器
- excel - 宏疑难解答
- c# - 具有多个构造函数的 ASP .Net Core Web API 依赖注入类
- windows - 全新 pybind11 安装:两个“嵌入”测试失败
- c++ - 在 C++ 和 Windows 操作系统中,如何在 exe 关闭时调用函数?
- c++ - SFML 白色矩形