【发布时间】:2015-04-13 21:20:42
【问题描述】:
我正在尝试清理和操作人口普查局数据的数据框。我在 R 中使用(for 循环)来做到这一点,但到目前为止这需要 20 多个小时!
问题是我使用了两个不同的数据框
这是我的代码
t=1
for(i in 1:25558){ # number of records in the Housing record
family <- array(0,dim=c(0,12)) # creating an empty array to store row number
k=1
n=0
for(j in t:52608){ # number of records in the Personal record
if(Housing[i,5] == Personal[j,2]) {
family[k]=j
k=k+1
n=1
}
else(
if(n == 1) {
t=j
break
}
)
}
a=0
for(m in 1:length(family)){
if(is.na(Personal[family[m],22])) { # Some families has mix values: NA and numbers
break
}
else(
if(Personal[family[m],22] > 1){
a=a+1
}
)
}
if(a == length(family)) {
Housing[i,1]=1
}
}
(编辑 - 一个例子): 在 Hosing 记录中,我对每个家庭都有一个 ID。在个人记录中,所有家庭成员都使用相同的家庭 ID。
Housing Record:
ID Family Ability to Speak English
1 0
2 0
3 1
Personal Record:
ID Member Person Ability to Speak English
1 1 1
1 2 NA
1 3 2
2 1 4
2 2 1
3 1 3
3 2 2
注意:这里的“NA”不代表“不可用”,它有特定的含义(基本上不应该去掉)
我需要根据家庭成员的英语口语能力将“家庭英语口语能力”列的值更改为 1。 (见我的代码的最后一部分)
【问题讨论】:
-
请提供一些显示数据结构的示例,并描述“清理”后的输出应该是什么样子。
-
你好,我举个例子,谢谢
-
您能用文字解释一下您分配 0 而不是 1 的规则是什么?循环有很多移动部件,很难跟随。此外,
Personal[family[m],22]与您的示例中的任何内容都不匹配。 -
您给定的数据并不清楚家庭能力列是如何确定的。家庭 2 有两个成员得分为正,但家庭能力列为零。
标签: r performance for-loop dataframe