假设我有一个名为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
我们非常感谢您的帮助!
答案 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