Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过从多个级别中选择一个来插入数据_R_Merge_Levels - Fatal编程技术网

R 通过从多个级别中选择一个来插入数据

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

使用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
第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