我有一个数据集,其中包含与此类似的结构数据:
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 =”,但我宁愿自动完成所有操作。谢谢!
答案 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))
<强>逻辑强>:
在ifelse
中sapply
使用条件==&#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