【发布时间】:2016-09-21 11:57:29
【问题描述】:
尝试对数据框中的每一列进行一些操作。不确定使用apply 或for(不确定如何忽略apply 中的第一列)。
问题 1:
为了简单地把每个名字打印两次,我想出了:
for (i in names(dt)){if(str_length(i) < 3) {print(i);print(i)}}
第一列的名称是唯一一个字符串长度 > 3 这就是我使用它的原因。
我尝试使用:
for (i in dt$i){if(str_length(names(i)) < 3) {print(i);print(i)}}
for (i in dt$i){if(str_length(names(dt)) < 3) {print(i);print(i)}}
简单地打印每列两次,但它只是创建了一个空值。
问题 2:
我实际要做的不是打印两次;是每列的顺序:order(-i)??
然后创建一个子集:head(i, n=500)??
不确定这是额外步骤还是上述步骤的扩展。然后将其定义为data.frame; dt(i) < data.frame(head(i, n=500))??
然后保存该表:write.csv(dt(i), "newfolder/i.csv", row.names = FALSE) - 我认为这只会不断覆盖一个名为 i.csv 的文件,不知道如何根据 i 命名该文件。
也许apply 是更好的方法,我不确定。
我最简单的方法(这样我就明白发生了什么)将不胜感激。我只有 40 列,每列有 50,000 行,所以它不应该那么慢。
编辑
为了更清楚,我将添加一个示例:
Name Math Science PE
David 90 70 25
Tom 100 60 40
John 30 40 100
我想以 3 个 csv 结尾,第一个看起来像:
Name Math
Tom 100
David 90
在上述情况下,头部 n=2。 csv 也可以有其他列,但它们不是必需的。
【问题讨论】:
-
not sure how I'd name the file based on i.- 使用paste0("myFile", i, ".csv") -
您的帖子不是很清楚,可能因为过于宽泛而关闭。请添加输入数据和预期输出。
apply只是for loop的美化版本,所以由你决定使用哪一个。 -
我的编辑信息够不够?
-
感谢您的编辑,Name 是行名还是列?
-
它已经是一列,因此为什么在我的示例中,我在一开始就使用 str_length 作为 names(),因为这是唯一一个名称超过 2 个字母的列 - 数据表来自 csv ,我想我可以将列定义为名称,不确定这是否是更好的做法。
标签: r for-loop dataframe multiple-columns