我想创建另一个列category
,它基于是否存在非0整数,具体取决于列标题。具体地说,如果所有非0整数都在包含“rural”的报头中,则category
中的值将是“rural.”如果所有非0整数都在标题包含“urban”的列中,则category
中的值将是“urban”。如果在标题中包含“rural”和“urban”的列中混合了非0整数,则category
中的值将是“mixed”。
出于此目的,NA和0被视为相同
这是我的 Dataframe 的一个片段。值得注意的是,还有更多以“hosp”开头的列以及与此目的无关的列
df <- data.frame(ID = c(1, 2, 3, 4),
hosp1_ruralSEDD = c(0, 0, 2, 2),
hosp1_urbanSEDD = c(0, 0, 0, 0),
hosp1_ruralSID = c(0, 0, 0, 1),
hosp1_urbanSID = c(12, 1, 1, 0),
hosp2_ruralSEDD = c("NA", "0", "0", "0"),
hosp2_urbanSEDD = c("NA", "0", "0", "0"),
hosp2_ruralSID = c("NA", "0", "0", "0"),
hosp2_urbanSID = c("NA", "9", "6", "0"),
hosp3_ruralSEDD = c("NA", "NA", "NA", "1"),
hosp3_urbanSEDD = c("NA", "NA", "NA", "0"),
hosp3_ruralSID = c("NA", "NA", "NA", "0"),
hosp3_urbanSID = c("NA", "NA", "NA", "0"))
字符串
这将是我的理想输出:
的数据
3条答案
按热度按时间xxslljrj1#
3bygqnnd2#
你的数据是宽格式的,我发现这些类型的任务在长格式中更有效地完成,然后转换回来。如果有其他不相关的列,则需要调整此代码:
字符串
注意:
mutate(across(...))
是必要的,因为在您的示例数据中,您引用了数字值,而在其他示例数据中则仅引用了数字值。在R数据框中,列是 * 原子 * 的,这意味着它们必须都是一种类型,因此当透视到长格式时,您不能合并字符和数字。强制这些列为数字将生成警告消息。您的真实的数据可能都是数字,因此不需要这一行。输出
型
2ledvvac3#
一种使用
pivot_longer
的方法,然后提取名称,找到条件,最后将pivot_wider
转换为原始格式。字符串