如何生成汇总表?

时间:2020-06-18 22:29:56

标签: r stringr tm

假设我有一个名为df的下表。

A; B
A; B
B; C; D
C; D; E; F

该行每个元素的权重计算为:wt[i] <- 1/lengths(str_split(df[1],";"))理想情况下,每个元素的上方表格权重似乎如下。

0.5*A; 0.5*B
0.5*A; 0.5*B
0.333*B; 0.333*C; 0.333*D
0.25*C; 0.25*D; 0.25*E; 0.25*F

所以,我的目的是要有一个表格,其中的频率是重量的总和。我需要的输出如下:

A     B     C     D      E     F
1  1.333 0.583  0.583  0.25  0.25

我们非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这里是private static Action<object, T> CreateSetterExpression<T>(string fooType) { // IFoo is a base interface in the interop assembly that // we are interested in. var fooBaseInterfaceType = typeof(IFoo); var fooInterfaceType = fooBaseInterfaceType.Assembly .GetType( $"{fooBaseInterfaceType.Namespace}.IFoo{fooType}", true, true); var setValueMethodInfo = fooInterfaceType.GetMethod("SetRequestedValue", BindingFlags.Instance | BindingFlags.Public, null, CallingConventions.Any, new[] { typeof(T) }, null); ParameterExpression instanceParam = Expression.Parameter(typeof(object), "instanceObject"); var instanceExp = Expression.Convert(instanceParam, fooInterfaceType); ParameterExpression valueParam = Expression.Parameter(typeof(T), "value"); var callExpression = Expression.Call(instanceExp, setValueMethodInfo, valueParam); return Expression.Lambda<Action<object, T>>( callExpression, instanceParam, valueParam) .Compile(); } 中的一个选项。将第一列除以base R,然后将零或多个空格(;分开后,得到\\s*的{​​{1}}并使用{{1 }}

lengths

或者在list中,我们可以使用sum拆分列,然后按tapply进行分组

lst1 <- strsplit(df[[1]], ";\\s*")
l1 <- lengths(lst1)
tapply(rep(1/l1, l1), unlist(lst1), sum)
#        A         B         C         D         E         F 
#1.0000000 1.3333333 0.5833333 0.5833333 0.2500000 0.2500000 

数据

tidyverse