如何基于“已检查”与“未选中”进行重塑

时间:2018-05-24 02:59:59

标签: r reshape reshape2 xlconnect

我有一个数据集,其中包含与此类似的结构数据:

as

我如何格式化这些数据以使其看起来更像这样?

ID       | Treatment=Induction Chemo | Treatment=Hypomethylating Chemo | Treatment=Consolidation Chemo
Patient1           Checked                       Unchecked                Unchecked
Patient2           Unchecked                     Checked                  Unchecked
Patient3           Unchecked                     Unchecked                Checked

我想用R自动化它,它是否可能?我不确定重塑包是否具备这些功能。如果所有其他方法都失败了,我愿意手动编辑标题以从每个标题中删除“Treatment =”,但我宁愿自动完成所有操作。谢谢!

1 个答案:

答案 0 :(得分:1)

你可以尝试这个,但是,作为一个警告,我假设你没有在特定列中检查重复值。如果是这种情况,这应该有效。

假设df是您输入的data.frame。

df1 <- df
df1$Final_col <- do.call("paste0",data.frame(sapply(names(df), function(x)ifelse(df[,x] == "Checked", gsub("Treatment=","",x), '')), stringsAsFactors=F))

<强>逻辑

ifelsesapply使用条件==&#34;已选中&#34;在df的所有列上,然后替换&#34; Treatment =&#34;在使用gsub的名称中,在这些列上没有任何内容,以便在(&#34; Treatment =&#34;)之后的值仅在文本可以获取时保留,只要有成功的{{1如果值为TRUE,我们将使用ifelse获取的值替换这些值。最后使用gsub粘贴功能粘贴所有结果,只获得一列。

数据

do.call

<强>输出:

您可以检查答案输出中的df <- structure(list(ID = c("Patient1", "Patient2", "Patient3"), `Treatment=Induction Chemo` = c("Checked", "Unchecked", "Unchecked"), `Treatment=Hypomethylating Chemo` = c("Unchecked", "Checked", "Unchecked"), `Treatment=Consolidation Chemo` = c("Unchecked", "Unchecked", "Checked")), .Names = c("ID", "Treatment=Induction Chemo", "Treatment=Hypomethylating Chemo", "Treatment=Consolidation Chemo" ), class = "data.frame", row.names = c(NA, -3L)) ,您可以删除其他列,我保留了它们以便您可以比较输入和输出。

Final_col