你好我在数据帧中有两列。材料编号和供应商编号。我想知道从两个或更多供应商订购的材料编号?
关注数据框
C:\Windows\System32\inetsrv\Config\applicationHost.config
我希望以这种格式获得结果
OrderNo. Supplier Materialno
1 LF 101
2 LF 101
3 LF 101
4 DD 101
5 DD 102
6 DF 103
7 DF 104
8 DD 103
9 DD 104
10 AA 105
11 AB 105
12 AC 106
答案 0 :(得分:4)
使用dplyr
:
library(dplyr)
df %>%
group_by(Materialno) %>%
mutate(Count = n_distinct(Supplier)) %>%
ungroup()
<小时/> 产生
# A tibble: 12 x 4
OrderNo. Supplier Materialno Count
<int> <chr> <int> <int>
1 1 LF 101 2
2 2 LF 101 2
3 3 LF 101 2
4 4 DD 101 2
5 5 DD 102 1
6 6 DF 103 2
7 7 DF 104 2
8 8 DD 103 2
9 9 DD 104 2
10 10 AA 105 2
11 11 AB 105 2
12 12 AC 106 1
请注意,您的输入数据框有除输出数据帧之外的其他行,因此与您想要的输出之间存在差异。
答案 1 :(得分:2)
使用基础R它是一个单行。
df$Count <- ave(as.integer(df$Supplier), df$Materialno, FUN = function(x) length(unique(x)))
df
# OrderNo. Supplier Materialno Count
#1 1 LF 101 2
#2 2 LF 101 2
#3 3 LF 101 2
#4 4 DD 101 2
#5 5 DD 102 1
#6 6 DF 103 2
#7 7 DF 104 2
#8 8 DD 103 2
#9 9 DD 104 2
#10 10 AA 105 2
#11 11 AB 105 2
#12 12 AC 106 1
答案 2 :(得分:0)
基地R:
merge(df,
do.call(rbind, by(df, df$Materialno, function(x) {
c(Materialno = x$Materialno[1], Count = length(unique(x$Supplier)))))
},
by = "Materialno")
Materialno OrderNo. Supplier Count
1 101 1 LF 2
2 101 2 LF 2
3 101 3 LF 2
4 101 4 DD 2
5 102 5 DD 1
6 103 6 DF 2
7 103 8 DD 2
8 104 7 DF 2
9 104 9 DD 2
10 105 10 AA 2
11 105 11 AB 2
12 106 12 AC 1