我试图在嵌套数据框中提取唯一的行集。
初始数据框如下所示:
df <- data.frame(
hid=c(1,1,1,1,2,2,2,2,2,3,3,3,3),
mid=c(1,2,3,4,1,2,3,4,5,1,2,3,4),
tmid=c("010","01010","010","01020",
"010","0120","010","010","020",
"010","01010","010","01020"),
thid=c("010","02020","010","02020",
"000","0120","010","010","010",
"010","02020","010","02020"),
tdid=c("000","01010","010","02020",
"000","0100","010","010","010",
"000","01010","010","02020"),
tiid=c("010","02020","010","01020",
"020","0220","020","020","020",
"010","02020","010","01020")
)
在dara框架中打印:
> df
hid mid tmid thid tdid tiid
1 1 1 010 010 000 010
2 1 2 01010 02020 01010 02020
3 1 3 010 010 010 010
4 1 4 01020 02020 02020 01020
5 2 1 010 000 000 020
6 2 2 0120 0120 0100 0220
7 2 3 010 010 010 020
8 2 4 010 010 010 020
9 2 5 020 010 010 020
10 3 1 010 010 000 010
11 3 2 01010 02020 01010 02020
12 3 3 010 010 010 010
13 3 4 01020 02020 02020 01020
此数据框由以下字段组成:
hid
:家庭ID mid
:家庭成员ID tmid, thid, tdid, tiid
:用不同的定义表示每个家庭成员活动链的变量,如0(留在家里)-1(家庭以外的活动)-0(待在家里)现在,我需要提取家庭采取的独特成员活动集。我不仅要提取每个家庭中的唯一行,还需要提取自己的设置。因此,df %>% distinct(hid,tmid,tdid,tiid)
无法提取不同的活动集,df %>% distinct(hid,tmid,tdid,tiid)
无法将每个家庭中的一系列活动考虑在内。所需的输出如下所示:
> df.unique
shid smid tmid thid tdid tiid
1 1 1 010 010 000 010
2 1 2 010 010 010 010
3 1 3 01010 02020 01010 02020
4 1 4 01020 02020 02020 01020
5 2 1 010 000 000 020
6 2 2 010 010 010 020
7 2 3 020 010 010 020
8 2 4 0120 0120 0100 0220
先前数据框之间的差异是:
hid==2
中的重复行已被删除(删除每个家庭中的重复行)hid==3
已被删除(删除与其他家庭完全相同的家庭活动)hid
和mid
被序号替换(家庭和会员的唯一ID没有任何意义)第一点和第三点可以解决,然而,第二点无法完成,因为仅通过应用distinct()
无法实现它。
我假设有可能将其转换为嵌套数据框并比较嵌套数据框。 目前我准备了以下嵌套数据框架。
> df.nest <- df.unique %>% dplyr::select(-n) %>% group_by(hid) %>% nest()
> df.nest$data
[[1]]
# A tibble: 4 x 5
smid tmid thid tdid tiid
<int> <fctr> <fctr> <fctr> <fctr>
1 1 010 010 000 010
2 2 010 010 010 010
3 3 01010 02020 01010 02020
4 4 01020 02020 02020 01020
[[2]]
# A tibble: 4 x 5
smid tmid thid tdid tiid
<int> <fctr> <fctr> <fctr> <fctr>
1 1 010 000 000 020
2 2 010 010 010 020
3 3 0120 0120 0100 0220
4 4 020 010 010 020
[[3]]
# A tibble: 4 x 5
smid tmid thid tdid tiid
<int> <fctr> <fctr> <fctr> <fctr>
1 1 010 010 000 010
2 2 010 010 010 010
3 3 01010 02020 01010 02020
4 4 01020 02020 02020 01020
* sid
是新添加的,用序号替换mid
,因为会员ID不再重要
是否要从嵌套列表(或先前显示为[[3]]
的常规数据框格式)中删除[[1]]
中具有相同数据框的df.unique
?
由于实际的dara框架包含超过60,000个家庭,我需要一种不是手动实现它的方法,例如df.nest[1:2,]
。其他不使用嵌套数据框架的解决方案也很受欢迎。
我找到了名为all_equal/all.equal
和identical
的函数,但这些函数用于比较两个数据框。
答案 0 :(得分:-2)
复制的函数可以删除重复的行。 例: df [!duplicated(df [c(“hid”,“mid”,“tmid”,“thid”,“tdid”,“tiid”)]),]