我正在处理人口普查数据。数据集如下所示:它是由Id
标识的家庭(或家庭)的集合,并且每个家庭成员都有Id.in.HH
。每个家庭都有一个头。家庭中的每个实体都有relation
户主[1
表示头部,2
表示头部配偶,3
表示头部的孩子]。例如,Id == 1
的家庭有4位成员Id.in.HH
,范围从1到4.此家庭的头部[Id == 1 & Id.in.HH == 3
]明确表示Relation.to.Head
值[{1}} {1}}]。等等。 Relation.to.Head == 1
有两个值[Gender
,1: male
]。数据集来自允许男性使用一夫多妻制的国家/地区。我想添加一个计算族2: female
的列。如果是一个男性头像和一个妻子[Type
]的家庭,如果是一个有女性头像和一个丈夫[[{1}}]的家庭,如果是一个男性头部有几个妻子的家庭[Type := 1
]。对于每个孩子,都注意到她/他母亲的Type:= 2
。我想添加一个由她/他母亲的出生日期组成的专栏。我和Type:= 3
合作,但是他是一名业余爱好者。
Id.In.HH
我希望它看起来像是:
data.table
我以这种方式试过@jlhoward解决方案:
Id Id.in.HH Relation.to.Head Gender Mother.Id.In.HH Birth
1 1 2 1 NA 1950
1 2 3 2 3 1975
1 4 3 2 3 1980
1 3 1 2 NA 1955
2 2 1 1 NA 1943
2 3 2 2 NA 1945
2 1 2 2 NA 1960
2 5 3 1 3 1964
2 4 3 2 1 1980
3 2 1 1 NA 1975
3 3 2 2 NA 1977
3 1 3 1 3 1994
但我收到了这个错误:
Id Id.in.HH Relation.to.Head Gender Mother.Id.In.HH Birth Type Mom.Birth
1 1 2 1 NA 1950 2 NA
1 2 3 2 3 1975 2 1955
1 4 3 2 3 1980 2 1955
1 3 1 2 NA 1955 2 NA
2 2 1 1 NA 1943 3 NA
2 3 2 2 NA 1945 3 NA
2 1 2 2 NA 1960 3 NA
2 5 3 1 3 1964 3 1945
2 4 3 2 1 1980 3 1960
3 2 1 1 NA 1975 1 NA
3 3 2 2 NA 1977 1 NA
3 1 3 1 3 1994 1 1977
答案 0 :(得分:3)
真的有两个问题。这是第一部分。
get.type <- function(relation,gender) {
if (sum(relation==2)>1) return(3L)
gender[relation==1]
}
DT[,Type:=get.type(Relation.to.Head,Gender), by=Id]
使用@ PierreLafortune对第二部分的出色方法:
DT[, Mom.Birth := Birth[match(Mother.Id.In.HH, Id.in.HH)], by=Id]
DT
# Id Id.in.HH Relation.to.Head Gender Mother.Id.In.HH Birth Type Mom.Birth
# 1: 1 1 2 1 NA 1950 2 NA
# 2: 1 2 3 2 3 1975 2 1955
# 3: 1 4 3 2 3 1980 2 1955
# 4: 1 3 1 2 NA 1955 2 NA
# 5: 2 2 1 1 NA 1943 3 NA
# 6: 2 3 2 2 NA 1945 3 NA
# 7: 2 1 2 2 NA 1960 3 NA
# 8: 2 5 3 1 3 1964 3 1945
# 9: 2 4 3 2 1 1980 3 1960
# 10: 3 2 1 1 NA 1975 1 NA
# 11: 3 3 2 2 NA 1977 1 NA
# 12: 3 1 3 1 3 1994 1 1977
答案 1 :(得分:-1)
while(n <= a)
{
f = f * n;
// checks if n is even;
// n even if the remainder of the division by 2 is zero
if(n % 2 == 0){
s += 1 / (float)f;
}
n = n + 1;
}