R 通过从多个级别中选择一个来插入数据
使用2个数据帧作为R 通过从多个级别中选择一个来插入数据,r,merge,levels,R,Merge,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
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
第A、B、C、D、E层生物数量
1火腿1 AB
2 1火腿1 c b
3 1 Sta 1 b a b
4 1 Sta 1 a c
5 1 Sta 1
6 2 Sta 2 c a b
7 2 Sta 2 a c b a
8 3火腿3
df2
num层名称
1火腿
2 1 Sta
3 2 2 Sta
433火腿
我想从df1中找到匹配num、organic和tier的列,并插入从df1$A到df1$E的信息。
有没有办法只选择最高级别,而不是插入所有数据
例如,如果级别“a”>“b”>“c”,
如果存在“a”,则插入“a”,
如果“b”不存在任何“a”,则插入“b”,
等等
最后,如果只有NAs或存在,请插入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>
df3
数字层名称A B C D E
1火腿a b
2 1 Sta a b
3 2 2 Sta a c a a
433火腿
我认为您甚至不需要df2
。只需将正确的级别分配给有序的系数后,进行聚合
:
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>
ids