通过从多个级别之一中选择来插入数据
inserting data by choosing from one of multiple levels
有 2 个数据帧
df1
num organism tier A B C D E
1 1 Ham 1 <NA> a <NA> <NA> b
2 1 Ham 1 <NA> c <NA> <NA> b
3 1 Sta 1 b <NA> <NA> a b
4 1 Sta 1 a <NA> <NA> a c
5 1 Sta 1 <NA> <NA> <NA> <NA> <NA>
6 2 Sta 2 c c <NA> a b
7 2 Sta 2 a c <NA> b a
8 3 Ham 3 <NA> <NA> <NA> <NA> <NA>
df2
num tier name
1 1 1 Ham
2 1 1 Sta
3 2 2 Sta
4 3 3 Ham
我想从 df1 中找到与 num、organism 和 tier 匹配的列,并将 df1$A 到 df1$E 的信息插入。
有没有办法只选择最高级别而不是插入所有数据?
例如,如果级别 'a' > 'b' > 'c',
如果存在 'a',则插入 'a',
如果 'b' 存在而没有任何 'a',则插入 'b',
等等。
最后,如果只有 NA 或存在,则插入 NA。
我的最终结果应该是
df3
num tier name A B C D E
1 1 1 Ham <NA> a <NA> <NA> b
2 1 1 Sta a <NA> <NA> a b
3 2 2 Sta a c <NA> a a
4 3 3 Ham <NA> <NA> <NA> <NA> <NA>
我认为你甚至不需要 df2
。将正确的级别分配给 ordered
factor
:
后只需 aggregate
ids <- match(c("num","organism","tier"), names(df1))
df1[-ids] <- lapply(df1[-ids], ordered, levels=c("c","b","a") )
aggregate(df1[-ids], df1[ids], FUN = max, na.rm=TRUE)
# num organism tier A B C D E
#1 1 Ham 1 <NA> a <NA> <NA> b
#2 1 Sta 1 a <NA> <NA> a b
#3 2 Sta 2 a c <NA> a a
#4 3 Ham 3 <NA> <NA> <NA> <NA> <NA>
忽略 warnings()
- R 只是警告您没有使用 max
,如果您只有 NA
值。
有 2 个数据帧
df1
num organism tier A B C D E
1 1 Ham 1 <NA> a <NA> <NA> b
2 1 Ham 1 <NA> c <NA> <NA> b
3 1 Sta 1 b <NA> <NA> a b
4 1 Sta 1 a <NA> <NA> a c
5 1 Sta 1 <NA> <NA> <NA> <NA> <NA>
6 2 Sta 2 c c <NA> a b
7 2 Sta 2 a c <NA> b a
8 3 Ham 3 <NA> <NA> <NA> <NA> <NA>
df2
num tier name
1 1 1 Ham
2 1 1 Sta
3 2 2 Sta
4 3 3 Ham
我想从 df1 中找到与 num、organism 和 tier 匹配的列,并将 df1$A 到 df1$E 的信息插入。 有没有办法只选择最高级别而不是插入所有数据?
例如,如果级别 'a' > 'b' > 'c', 如果存在 'a',则插入 'a', 如果 'b' 存在而没有任何 'a',则插入 'b', 等等。 最后,如果只有 NA 或存在,则插入 NA。
我的最终结果应该是
df3
num tier name A B C D E
1 1 1 Ham <NA> a <NA> <NA> b
2 1 1 Sta a <NA> <NA> a b
3 2 2 Sta a c <NA> a a
4 3 3 Ham <NA> <NA> <NA> <NA> <NA>
我认为你甚至不需要 df2
。将正确的级别分配给 ordered
factor
:
aggregate
ids <- match(c("num","organism","tier"), names(df1))
df1[-ids] <- lapply(df1[-ids], ordered, levels=c("c","b","a") )
aggregate(df1[-ids], df1[ids], FUN = max, na.rm=TRUE)
# num organism tier A B C D E
#1 1 Ham 1 <NA> a <NA> <NA> b
#2 1 Sta 1 a <NA> <NA> a b
#3 2 Sta 2 a c <NA> a a
#4 3 Ham 3 <NA> <NA> <NA> <NA> <NA>
忽略 warnings()
- R 只是警告您没有使用 max
,如果您只有 NA
值。