For循环从Dataframe列标题中提取矢量对象

时间:2017-08-14 21:12:40

标签: r for-loop

我有一个包含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。我的数据框中的一些列是嵌套列表,以防这会影响操作。

3 个答案:

答案 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
}