【问题标题】:R: How to split a specific column based on symbol in R? [duplicate]R:如何根据 R 中的符号拆分特定列? [复制]
【发布时间】:2011-04-10 05:49:27
【问题描述】:

可能重复:
Replacing ^ and | sybmbols in a matrix

previous message(替换矩阵中的 ^ 和 | 符号)中,讨论了删除列表中符号的方法。

在这里,我只想替换矩阵的一列(药物列)。例如:

Patient Hospital Drug Response
111     AAA      B+A  Good
222     CCC      B    Good
333     DDD      A+C  Bad+relapse

转为以下格式。

Patient Hospital Drug1 Drug2 Response
111     AAA      B     A     Good
222     CCC      B     NA    Good
333     DDD      A     C     Bad+relapse

使用 R 的方法是什么。

【问题讨论】:

  • 为什么这与您之前的帖子不同?我们不是在这里为您做所有事情,您之前帖子的答案中的方法可以在这里应用!
  • 凯瑟琳,你继续表现出令人震惊的不愿自己做任何事情的态度。由于这可能是几天内的第五个基本问题,您可能会发现这里的人们已经没有耐心试图提供帮助,除非您至少表现出一点点努力和对至少一些知识的理解 基础知识。

标签: r split


【解决方案1】:

像这样:

df <- data.frame(drug1 = c("B+A", "B", "A+C"))
df
df$drug2 <- lapply(strsplit(as.character(df$drug1), "\\+"), "[", 2)
df$drug1 <- lapply(strsplit(as.character(df$drug1), "\\+"), "[", 1)
df

结果

> df
  drug1 drug2
1     B     A
2     B    NA
3     A     C
> 

【讨论】:

  • 这个例子给出了一个不能导出到 csv 的非平面 data.frame。无论如何要解决这个问题?
  • 您可以使用unlist,例如。 unlist(lapply(strsplit(as.character(df$drug1), "\\+"), "[", 2))
  • 如果我有 1000 个元素由 + 符号分隔,而不仅仅是 A+B,我怎么能做到这一点,所以我想将它们分成 1000 个不同的列?
【解决方案2】:

一种可能的方法是使用函数strsplit

> clm
[1] "A+B" "B"   "A+C"
> strsplit(clm, "+")
[[1]]
[1] "A" "+" "B"

[[2]]
[1] "B"

[[3]]
[1] "A" "+" "C"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多