我有一个有8个种族变量的数据集,我需要在不同的条件下将其改为7个。受访者被指示选择尽可能多的种族。例如,ethnicity_2表示"白人"。一些"混合"种族的人选择了"白人"加上另一个种族。我想做一个新的种族,"白人",这意味着回答者选择了"白人"而不是其他种族。2我试过了,但是失败了。3下面是我试过的代码的一部分。
ethnicities.19 <- c("ethnicity_1", "ethnicity_2", "ethnicity_3", "ethnicity_4",
"ethnicity_5", "ethnicity_6", "ethnicity_7", "ethnicity_8")
bar <- foo %>%
select(ID, ethnicity_1:ethnicity_8) %>%
mutate(across(.cols=ethnicity_1:ethnicity_8, .fns=function(x) { ifelse(is.na(x), 0, x)} )) %>%
rowwise() %>%
mutate(dnresp=ifelse(sum(eval(as.name(ethnicities.19)))==0, 1, 0),
## dnresp=ifelse(!any(eval(as.name(ethnicities.19))==1), 1, 0),
white=ifelse(eval(as.name(ethnicities.19[2]))==1 & sum(eval(as.name(ethnicities.19[-c(2)])))==0, 1, 0))
等等。有了这段代码,dnresp
变量几乎在每一种情况下都会被不恰当地设置。而且有几个选择ethnicity_2
和其他种族的人会被标记为"白人"。
我也试过这个:
dnresp=ifelse(!any({{ethnicities.19}}==1), 1, 0))
但这告诉我所有的受访者都没有选择种族。奇怪的是,我从这个代码中也得到了同样的结果:
dnresp=ifelse(!any({{ethnicities.19}}==0), 1, 0))
感谢你的帮助。
以下是一个数据样本:
structure(list(ID = c("ATL_01", "ATL_02", "ATL_03", "ATL_04",
"ATL_05", "ATL_06", "ATL_07", "ATL_08", "ATL_09", "ATL_10", "ATL_11",
"ATL_12", "ATL_13", "ATL_14", "ATL_15", "ATL_16", "ATL_17", "ATL_18",
"ATL_19", "ATL_20"), ethnicity_1 = c(NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_), ethnicity_2 = c(1, 1, 1, NA, 1,
NA, 1, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, 1, NA, NA), ethnicity_3 = c(NA,
NA, NA, 1, NA, 1, NA, 1, 1, NA, 1, 1, NA, 1, 1, 1, 1, NA, 1,
1), ethnicity_4 = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_), ethnicity_5 = c(NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_), ethnicity_6 = c(NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_), ethnicity_7 = c(NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_), ethnicity_8 = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
1条答案
按热度按时间ovfsdjhp1#
你可以考虑向量化在R中,使用
rowSums
我们可以创建一个向量,在所有非种族_2变量中有0
,&
将它与种族_2中有1
结合起来。对于根本没有值的无响应(我假设这就是dnrsp的意思),我们可以在整个变量集上使用
!is.na
,其中我们希望rowSums
为0
。+
将布尔值强制转换为整数,您也可以使用as.integer()
,但它更长。给出: