微数据的R数据处理
我对通过在行条件中创建新变量来操作数据非常陌生,所以请耐心听我说。 我的数据如下所示:微数据的R数据处理,r,dataframe,R,Dataframe,我对通过在行条件中创建新变量来操作数据非常陌生,所以请耐心听我说。 我的数据如下所示: Unit R Sex 1000 1 1 1000 2 2 1000 3 2 1000 3 2 1001 1 1 1001 2 1 1002 1 2 1003 1 1 1003 2 2 1003 4 2 如果单位是家庭,R是家庭组成部分的角色(1是户主,2是配偶,3是子女),性别是相应的性别。 我想创建一个变量newvar,该变量将单位重新编码为1(否则为0),如果一个家庭有一对同性
Unit R Sex
1000 1 1
1000 2 2
1000 3 2
1000 3 2
1001 1 1
1001 2 1
1002 1 2
1003 1 1
1003 2 2
1003 4 2
如果单位是家庭,R是家庭组成部分的角色(1是户主,2是配偶,3是子女),性别是相应的性别。
我想创建一个变量newvar
,该变量将单位重新编码为1(否则为0),如果一个家庭有一对同性伴侣和孩子,如果该家庭有孩子(R=3存在),那么如果R=1的性别==R=2的性别在同一个家庭/单位内,则重新编码为1。
在此问题上的任何帮助都将不胜感激 一种方法是:
df1 <- unsplit(lapply(split(df, df$Unit),
function(x) {
indx <- x$Sex[x$R %in% 1:2]
if(length(unique(indx))==1 & length(indx)>1 & any(x$R==3)){
x$newvar <-1
}
else x$newvar <-0
x}),
df$Unit)
df1$newvar
# [1] 0 0 0 0 0 0 0 0 0 0
df1在本例中,newvar是否都是0s
?另外,我假设R==4也是为孩子们编码的?如果是这样的话,为什么1003
单元没有3
呢?嗨,Akrun,它可以工作,但在你放错的条件下,我也得到了最后一个单元1003的一个“没有孩子”(4是“其他”),而我在newvar
@Ale这里需要一个0,我得到了所有的0
。您正在使用更新的代码吗?现在它与新代码一起工作,谢谢!它看起来相当复杂(关于我习惯的编码)。如果(length(unique(indx))==1&length(indx)>1,那么具体做什么呢?@Ale第一个检查unique元素的长度是1(即,你希望sex是相同的),第二个检查sex中是否有多个元素。有时,只有一个元素,所以unique(indx)的长度是相同的在这种情况下,将为1。第二个条件确保这些情况已得到考虑。
df <- structure(list(Unit = c(1000L, 1000L, 1000L, 1000L, 1001L, 1001L,
1002L, 1003L, 1003L, 1003L), R = c(1L, 2L, 3L, 3L, 1L, 2L, 1L,
1L, 2L, 4L), Sex = c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L)), .Names = c("Unit",
"R", "Sex"), class = "data.frame", row.names = c(NA, -10L))