【发布时间】:2015-07-17 19:30:45
【问题描述】:
我正在尝试根据条件对配对数据进行子集化。
pair 包括在 2 天内观察到的两个个体。
我的样本的主要数据是:
'hldid', 'cid', 'pid', 'diary', 'sex', 'day', 'main1'。
'hldid'指配对数据标识符,
'cid' 是配对的数据日标识符
'pid' 个人标识符
'diary'日记(每人必须填写2本日记)
'sex' 'day' 'main1' 指性别、日期和观察到的活动。
我想做的是根据 2 个条件对数据进行子集化:
- 数据必须配对,这意味着
hldid必须属于 2 个人。 每一对都应该由一男一女组成。 - 个人必须填写 2 个
diary。所以hldid的4日记
我发现这样做的唯一方法是执行以下操作:
按性别区分
M = filter(dtaSimple, sex == 1)
W = filter(dtaSimple, sex == 2)
按配对日标识符合并
dtaSimple_c = merge(M, W, by = 'cid', suffixes = c('_m', '_w'))
那我就来了
cid hldid_m pid_m diary_m sex_m day_m main1_m hldid_w pid_w diary_w sex_w day_w main1_w
1 1250_1 1250 1250_2 1 1 1 0 1250 1250_1 1 2 1 0
2 1250_2 1250 1250_2 2 1 3 0 1250 1250_1 2 2 3 0
3 1294_1 1294 1294_2 1 1 6 0 1294 1294_1 1 2 6 0
4 1294_2 1294 1294_2 2 1 1 0 1294 1294_1 2 2 1 0
我认为这并不令人满意。
每行指的是每个hldid 的第一条日记,每列指的是pair 的男人或女人。
我想保留 1 行 1 个人 1 天的原始数据结构。
hldid cid pid diary sex day main1
1 1250 1250_1 1250_1 1 2 1 0
2 1250 1250_2 1250_1 2 2 3 0
3 1250 1250_1 1250_2 1 1 1 0
4 1250 1250_2 1250_2 2 1 3 0
.....
数据:
dtaSimple = structure(
list(
hldid = c(1250, 1250, 1250, 1250, 1294, 1294, 1294, 1294, 1352, 1352),
cid = c("1250_1", "1250_2", "1250_1", "1250_2", "1294_1", "1294_2", "1294_1", "1294_2", "1352_1", "1352_2"),
pid = c("1250_1", "1250_1", "1250_2", "1250_2", "1294_1", "1294_1", "1294_2", "1294_2", "1352_1", "1352_1"),
diary = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L),
sex = c(2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L),
day = c(1L, 3L, 1L, 3L, 6L, 1L, 6L, 1L, 1L, 3L),
main1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)),
.Names = c("hldid", "cid", "pid", "diary", "sex", "day", "main1"),
row.names = c(NA, 10L),
class = "data.frame"
)
【问题讨论】: