我有一个这样的数据框,其中的值由逗号分隔.

# Events
# A,B,C
# C,D
# B,A
# D,B,A,E
# A,E,B

我想要下一个数据帧

# Event1  Event2  Event3  Event4  Event5
# A       B       C       NA      NA
# NA      NA      C       NA      NA
# A       B       NA      NA      NA
# A       B       NA      D       E
# A       B       NA      NA      E

我试过cSplit,但没有想要的df.可能吗?

NOTE: The values doesn't appear in the same possition as the variable Event in the second dataframe.

推荐答案

1)这是一个基本R解决方案.拆分给出列表s的每一行,并创建包含可能值的cols.然后迭代s并将其转换为数据帧.

请注意,这不会对列名进行硬编码,即使某些列名是其他列名的子字符串,也会继续工作.

s <- strsplit(DF$Events, ",")
cols <- unique(sort(unlist(s)))

data.frame(Event = t(sapply(s, function(x) ifelse(cols %in% x, cols, NA))))

给:

  Event.1 Event.2 Event.3 Event.4 Event.5
1       A       B       C    <NA>    <NA>
2    <NA>    <NA>       C       D    <NA>
3       A       B    <NA>    <NA>    <NA>
4       A       B    <NA>       D       E
5       A       B    <NA>    <NA>       E

2)由于stack需要一个命名列表,因此该基本R解决方案使用上述strsplit,然后命名组件,然后调用stack.然后,我们使用tapply将其扩展为一个广泛的形式,并将其转换为一个数据帧并修复名称.

s <- strsplit(DF$Events, ",")
names(s) <- seq_along(s)
stk <- stack(s)

mat <- t(tapply(stk$values, stk, c))
colnames(mat) <- NULL
data.frame(Event = mat)

给:

  Event.1 Event.2 Event.3 Event.4 Event.5
1       A       B       C    <NA>    <NA>
2    <NA>    <NA>       C       D    <NA>
3       A       B    <NA>    <NA>    <NA>
4       A       B    <NA>       D       E
5       A       B    <NA>    <NA>       E

这也可以表示为R 4.2+管道:

DF |>
  with(setNames(Events, seq_along(Events))) |>
  strsplit(",") |>
  stack() |>
  with(tapply(values, data.frame(ind, values), c)) |>
  `colnames<-`(NULL) |>
  data.frame(Event = _)

笔记

可复制形式的输入:

Lines <- "Events
A,B,C
C,D
B,A
D,B,A,E
A,E,B"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)

R相关问答推荐

extract()函数不处理stanfit对象,我用错了吗?

如何使用行政边界形状文件中的人口普查数据调整格栅数据集中的人口数据

r带有参考年的两年移动平均线

通过R访问MoveApps API

MCMC和零事件二元逻辑回归

随机森林回归:下拉列重要性

在垂直轴中包含多个ggplot2图中的平均值

如何计算R数据集中每个女性的子元素数量?

从R导出全局环境中的所有sf(numrames)对象

如何得到R中唯一的组合群?

如何在R中对深度嵌套的tibbles中的非空连续行求和?

如何优化向量的以下条件赋值?

我正在努力用R计算数据集中的中值逐步距离

打印XTS对象

如何根据数据帧中的值从该数据帧中提取值?

安全地测试文件是否通过R打开

我如何go 掉盒子图底部的数字?

WRS2包中带有bwtrim的简单ANOVA抛出错误

在R中,如何从一系列具有索引名的变量快速创建数据帧?

网络抓取NBA.com