R 根据选定的条件返回和计算值

R 根据选定的条件返回和计算值,r,R,我一直在四处寻找,但仍然没有找到答案。我希望根据我的标准来查看和计算某些结果如果和匹配函数不会得到我想要的结果。原始数据集如下所示: Type Name Value A DK 3 A MO 2 A OM 5 A LSO 3 B GOP 6 B ADG 5 C BFC 7 D TMD 6 我想得到的是,如果Type=A,则列出名称并根据值计算权重,如下所示: DK 0.081 MO

我一直在四处寻找,但仍然没有找到答案。我希望根据我的标准来查看和计算某些结果<代码>如果和
匹配
函数不会得到我想要的结果。原始数据集如下所示:

Type  Name  Value
A     DK    3
A     MO    2
A     OM    5
A     LSO   3
B     GOP   6
B     ADG   5
C     BFC   7
D     TMD   6
我想得到的是,如果Type=A,则列出名称并根据值计算权重,如下所示:

DK    0.081
MO    0.054
OM    0.135
LSO   0.081
如有任何建议,我们将不胜感激。非常感谢你

require(dplyr)
require(dplyr)


d<-data.frame(Type=c("A","A","A","A","B","B","C","D"),
              Name = c("DK","MO","OM","LSO","GOP","ADG","BFC","TMD "),
              Value=c(3,2,5,3,6,5,7,6)
             )

dd<- d %>% 
      mutate(den=sum(Value)) %>% 
      filter(Type=="A") %>% 
      group_by(Name) %>% 
      summarise(Y=Value/min(den))
dd
d% 过滤器(类型==“A”)%>% 分组单位(名称)%>% 总结(Y=值/分钟(单位)) dd
如果性能很重要,并且您有大量数据,请使用包data.table中的data.table:

dt <- data.table( type=c("A", "A", "A", "A", "B", "B", "C", "D")
                  , name=c("DK", "MO", "OM", "LSO", "GOP", "ADG", "BFC", "TMD")
                  , value=c(3, 2, 5, 3, 6, 5, 7, 6))

value.total <- sum(dt$value)

dt[type=="A", .(name, weight=value/value.total)]
如果要计算每行(而不仅仅是“A”)的重量(“比例”),请使用:

其结果是:

   name     weight
1:   DK 0.08108108
2:   MO 0.05405405
3:   OM 0.13513514
4:  LSO 0.08108108
5:  GOP 0.16216216
6:  ADG 0.13513514
7:  BFC 0.18918919
8:  TMD 0.16216216

类型
属性表
和子集
prop.table(Value)[Type=='A']
请始终添加创建data.frame的R代码,以帮助更轻松地回答您的问题:-)“基于值的权重”表示组内或所有组内的值的权重(小值表示)?抱歉,我是从csv文件导入的。基于值的权重是指所有组中的权重。rawr的回答(
prop.table(Value)[Type='A']
)解决了我问题的第二部分。可能与Thank you Gaurav重复,但我得到了这个
错误:找不到函数“%>%”
如何修复?是否安装了dplyr软件包?尝试运行
install.packages(“dplyr”)
。如果已安装,则不会出现错误。忘记加载包。再次感谢你!嗨,Gaurav,当我将相同的代码应用到我自己的数据集时,我得到了
错误:需要一个值
。如果省略
summary()
部分,则不会收到任何错误消息。知道是什么导致了这个问题吗?@T-T,我的坏,用
summary()
代替
summary()
完美!谢谢!
dt[, .(name, weight=value/value.total)]
   name     weight
1:   DK 0.08108108
2:   MO 0.05405405
3:   OM 0.13513514
4:  LSO 0.08108108
5:  GOP 0.16216216
6:  ADG 0.13513514
7:  BFC 0.18918919
8:  TMD 0.16216216
Type <- c('A','A','A','A','B','B','C','D')
Name <- c('DK', 'MO', 'OM', 'LSO', 'GOP', 'ADG','BFC','TMD')
Value <- c(3,2,5,3,6,5,7,6)
Dat <- data.frame(Type, Name,Value)
Dat
     Type Name Value
1    A   DK     3
2    A   MO     2
3    A   OM     5
4    A  LSO     3
5    B  GOP     6
6    B  ADG     5
7    C  BFC     7
8    D  TMD     6

new.dat <- data.frame(Name, Weight=(Value/sum(Value)))
new.dat
    Name     Weight
1   DK       0.08108108
2   MO       0.05405405
3   OM       0.13513514
4   LSO      0.08108108
5   GOP      0.16216216
6   ADG      0.13513514
7   BFC      0.18918919
8   TMD      0.16216216