【发布时间】:2021-06-14 04:33:43
【问题描述】:
我正在分析一个时间使用数据集,其中对于每个家庭成员,144 列表示他们在每 10 分钟时段(即从 08:00 到 08:10)进行的活动,144 列表示,如果合作伙伴在每个间隔都在场,依此类推。
我正在尝试创建两种不同类型的变量。
- 我需要总结一个人在有和没有伴侣的情况下在某些活动中所花费的时间(例如,一个用于谈话和吃饭的总和变量,一个用于休闲的总和变量)。
在 SAS 中,这与使用这样的数组一起工作:
array main_men(*) main_men_1-main_men_144;
array partner_men(*) partner_men_1-partner_men_144;
sum_eating = 0;
do i=1 to 144; if main_men(i) in (100:200) & partner_men(i) in (0)
then sum_eating = sum_eating + 10; end;
因此,特定活动代码的每次出现和伙伴在同一个变量槽(1 到 144)中的条件都满足,一个新变量增加了 +10 分钟(因为每次出现代表一个 10 分钟时隙。 在 R 中,count 满足这两个条件的次数就足够了。
- 为了进行序列分析,我不仅需要总和变量,还需要 144 个新变量,这些变量表明个人是独自休闲还是与伴侣一起休闲,还是在做无偿工作等。
所以我需要 144 个变量来代替 24 个变量。 再说一次,我只知道 SAS 逻辑,但我想完全放弃 SAS 并转向 R。
array seq(*) seq_1-seq_144;
do i=1 to 144; if main_men(i) in (200:399) and partner_men(i) in (0)
then seq_paar(i)=1; end;
do i=1 to 144; if main_men(i) in (200:399) and partner_men(i) in (1)
then seq_paar(i)=2; end;
在这里,我创建了 144 个空白变量,如果特定活动代码发生并且个人独自一人(partner_men 为 0)则为 1,如果代码发生但个人与伴侣在一起则为 0。
我创建了一个数据集的小样本,希望它更加清晰和可重复:
structure(list(id = c(11, 12, 17, 31, 35, 36, 41, 42, 47, 61),
men_main_55 = c(210, 210, 421, 992, 132, 622, 630, 466, 611,
969), men_main_56 = c(210, 210, 421, 992, 132, 622, 630,
466, 611, 969), men_main_57 = c(210, 210, 421, 992, 611,
622, 630, 466, 611, 969), men_main_58 = c(210, 210, 421,
131, 120, 622, 466, 466, 611, 641), men_main_59 = c(210,
210, 421, 452, 120, 622, 466, 466, 611, 641), men_main_60 = c(210,
210, 421, 452, 120, 622, 466, 466, 611, 641), wom_main_55 = c(210,
210, 421, 992, 411, 622, 421, 120, 641, 630), wom_main_56 = c(210,
210, 421, 992, 411, 622, 947, 120, 641, 630), wom_main_57 = c(210,
210, 421, 992, 611, 622, 947, 120, 641, 630), wom_main_58 = c(210,
210, 421, 998, 120, 622, 947, 421, 641, 630), wom_main_59 = c(210,
210, 421, 461, 120, 622, 421, 421, 641, 630), wom_main_60 = c(210,
210, 421, 461, 120, 622, 421, 421, 641, 630), partner_men_55 = c(0,
0, 1, 1, 0, 1, 0, 0, 1, 0), partner_men_56 = c(0, 0, 1, 1,
0, 1, 0, 0, 1, 0), partner_men_57 = c(0, 0, 1, 1, 1, 1, 0,
0, 1, 0), partner_men_58 = c(0, 0, 1, 0, 1, 1, 0, 0, 1, 1
), partner_men_59 = c(0, 0, 1, 0, 1, 1, 0, 0, 1, 1), partner_men_60 = c(0,
0, 1, 0, 1, 1, 0, 0, 1, 1), partner_wom_55 = c(0, 0, 1, 1,
0, 1, 0, 0, 1, 0), partner_wom_56 = c(0, 0, 1, 1, 0, 1, 0,
0, 1, 0), partner_wom_57 = c(0, 0, 1, 1, 1, 1, 0, 0, 1, 0
), partner_wom_58 = c(0, 0, 1, 0, 1, 1, 0, 0, 1, 0), partner_wom_59 = c(0,
0, 1, 0, 1, 1, 0, 0, 1, 0), partner_wom_60 = c(0, 0, 1, 0,
1, 1, 0, 0, 1, 0)), row.names = c(NA, -10L), label = "PAARZEIT_SEQ",
class = c("tbl_df", "tbl", "data.frame"))
任何帮助将不胜感激。我尝试了各种 apply 和 loop 方法,但没有任何效果。 谢谢!
【问题讨论】:
-
您可以添加您的预期输出吗?你也没有定义
sum_eating -
你说得对,我忘了定义 sum_eating 变量。
-
我对第 1 部分的预期输出)将是每个人的变量,其中包含满足此条件的出现次数。对于第 2 部分)我需要从 1 到 144 的 144 个变量,指示个人在相应的 main_x 变量中是否有特定的活动代码,并且在相应的 partner_men 变量中是否有 0。