我有一个包含50列的数据框df
,我想为每个列名生成矢量对象,其中包含数据帧行的长度。
我的代码抛出错误:
for i in ((1:ncol(df)) {
colnames(df)[i] <- vector(mode = "list", length = nrow(df))
return (colnames(df)[i])
}
错误:
for i in((1:ncol(df)){错误:“for i”中的意外符号 colnames(df)[i]&lt; - vector(mode =“list”,length = nrow(df)) colnames中的错误(df)[i]&lt; - vector(mode =“list”,length = nrow(df)):
对象'我'找不到 return(colnames(df)[i])错误:找不到对象'i' }错误:“}”中的意外“}”
P.S。我的数据框中的一些列是嵌套列表,以防这会影响操作。
答案 0 :(得分:1)
for(i in(1:ncol(df)))&lt; -----括号错误的地方
答案 1 :(得分:0)
lapply(df, function(x) length(c(x, recursive=TRUE) ) )
我猜你想要每列中的条目数。通常,在数据框中,每列具有相同的行数。但是你有列表列,所以你想计算它们有多长,无法使用?
public static Func<TArgs, TResult> Memoized<TArgs, TResult>(Func<Func<TArgs, TResult>, TArgs, TResult> factory, IEqualityComparer<TArgs> comparer = null)
{
var cache = new ConcurrentDictionary<TArgs, TResult>(comparer ?? EqualityComparer<TArgs>.Default);
TResult FunctionImpl(TArgs args) => cache.GetOrAdd(args, _ => factory(FunctionImpl, args));
return FunctionImpl;
}
答案 2 :(得分:0)
做出与@Alex P相同的假设并且说他的lapply
解决方案总是比R中的for
循环更有效。如果你仍想使用for
循环,这是一个选项:
df <- data.frame(a=1:3)
df$b <- list(1:1, 1:2, 1:3)
l<-list(NULL)
for (i in colnames(df)){
p <- length(unlist(df[,i]))
l[[i]] = p
}