【发布时间】:2020-06-06 16:23:18
【问题描述】:
我对 R 有点陌生,我正在使用示例数据集来使用 ifelse 语句来弄脏我的手。在我的 Excel 电子表格中,根据个人的自我识别方式,在单元格内将数值分配给列标题为“种族”的类别。对应代码的种族如下:
1 - Asian
2 - Black or African American
3 - Hispanic or Latino
4 - Native American or American Indian
6 - Native Hawaiian or Pacific Islander
5 - Other (for those who identify with an ethnic group not listed)
7 - Caucasian
8 - Uncertain (for those who are unsure of their ethnicity or what ethnic group they identify with)
9 - Prefer not to answer (chose not to answer)
因此,在使用read.csv 加载我的文件cleaned-demographic-raw_data.csv 并将其分配给变量名称“DataAll_Analytical”之后:
DataAll_Analytical <- read.csv(".../Qualtrics_Raw-Clean_2019/cleaned-demographic-raw_data.csv", header = T, na.strings=c("NA"), stringsAsFactors = FALSE)
我的目标是根据将上述数值提取为字符串来获得具有二进制值的列。将“1”值分配给自我识别为相应种族的个人,如果没有,则分配“0”值。我目前的做法是:
#Started with 8 and 9 since those were easiest to account for
#returns 1 if the user does not know, 0 for false
DataAll_Analytical$any_dont_know <- ifelse(is.na(str_extract(DataAll_Analytical,"8"))==T,0,1)
#returns 1 if the user did not answer, 0 for false
DataAll_Analytical$no_answer <- ifelse(is.na(str_extract(DataAll_Analytical,"9"))==T,0,1)
# count for asian only
DataAll_Analytical$any_asian <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"1"))==T,0,1)
# count for black only
DataAll_Analytical$any_black <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"2"))==T,0,1)
# count for hispanic only
DataAll_Analytical$any_hispanic <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"3"))==T,0,1)
# count for native_american_only
DataAll_Analytical$any_native_american <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"4"))==T,0,1)
# count for others
DataAll_Analytical$any_other <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"5"))==T,0,1)
# count for those who are only hawaiian/pacific islander
DataAll_Analytical$any_hawaiian_pacific<- ifelse(is.na(str_extract(DataAll_Analytical$eth,"6"))==T,0,1)
# count for those who are only white
DataAll_Analytical$any_white<- ifelse(is.na(str_extract(DataAll_Analytical$eth,"7"))==T,0,1)
但是,我想说明那些认定为多种族的个人。这意味着指定他们是黑人、高加索人和亚洲人的个人将具有对应单元格的字符串组合“1,2,7”。对于认同为多种族的个人,我想将他们视为一个单独的群体,而不是与其他预定义的种族群体重叠。
我考虑过将此方法的字符串提取与 if-else 语句结合使用,但我担心潜在的重叠或错误识别。我是否可以使用一种方法将多种族但将黑人视为其种族之一(“2”、“3”、“6”)的人分类为“多种族”类别,而将仅识别为黑人的人( "2") 是否会被归类为只识别为黑人的人?
编辑:大家好,我想包含我正在使用的数据的一个子集。有超过 237 个条目,所以我从 dput(head(DataAll_Analytical, 20)) 得到了这个输出:
structure(list(eth = c("7", "7", "7", "2", "7", "7", "7", "5",
"2,3,7", "2", "2", "2", "2", "2", "2", "7", "7", "7", "2", "2"
)), .Names = "eth", row.names = c(NA, 20L), class = "data.frame")
编辑 2: 作为二进制值的输出示例,我为识别为黑色的参与者提供:
> DataAll_Analytical$any_black <- ifelse(is.na(str_extract(DataAll_Analytical$eth,"2"))==T,0,1) # count for black only
> print(head(DataAll_Analytical$any_black, 10))
[1] 0 0 0 1 0 0 0 0 1 1
我选择前十个结果来证明第 9 个元素确实包含“2”,但它也包含“3”和“7”(个人标识为黑人、西班牙裔/拉丁裔和高加索人)。我想在这里更排外一点,而不是将那个人与那些只识别为黑人的人分组。
【问题讨论】:
-
嗨,路,为了让社区提供帮助,我们需要一个最小的可重现示例来剪切并粘贴到我们的 R 会话中,这样我们就可以得到同样的错误。您可以使用
dput提供数据的子集。 -
您可以发布示例数据吗?请使用
dput(DataAll_Analytical)的输出编辑问题。或者,如果dput(head(DataAll_Analytical, 20))的输出太大。 -
嗨@mysteRious,我可以使用Pastebin 提供一个小子集吗?
-
只需执行
DataAll_Analytical %>% sample_frac(0.25) %>% dput() -> df并将它产生的输出复制到上面的问题文本中......而不是 0.25 选择一个百分比,这将产生 10-20 行数据。我们可以复制并粘贴到我们的 R & 将有一个数据框df包含您的数据 -
大家好。我使用了@RuiBarradas,生成的输出是:
structure(list(eth = c("7", "7", "7", "2", "7", "7", "7", "5", "2,3,7", "2", "2", "2", "2", "2", "2", "7", "7", "7", "2", "2" )), .Names = "eth", row.names = c(NA, 20L), class = "data.frame")
标签: r csv if-statement