Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
微数据的R数据处理_R_Dataframe - Fatal编程技术网

微数据的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))