R表示循环或应用于数据表列

R表示循环或应用于数据表列,r,for-loop,dataframe,multiple-columns,R,For Loop,Dataframe,Multiple Columns,正在尝试对数据帧中的每列执行一些操作。不确定是否使用apply或for(不确定如何忽略apply中的第一列) 问题1: 为了简单地将每个名字打印两次,我想: for(i in names(dt)){if(str_length(i)

正在尝试对数据帧中的每列执行一些操作。不确定是否使用
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)}}
我想以3个csv结尾,第一个看起来像:

Name Math
Tom  100
David 90
在上述情况下,头部n=2。csv也可以有其他列,但它们不是必需的。

尝试类似的操作(使用
mtcars
作为示例):

现在让我们对每列进行排序:

> mtcars[] <- lapply(mtcars, sort)
您还可以看到,行名称不再提供信息。请确保这是你想要的。要获得新数据帧中最小的500行以便保存,只需使用常规子集,例如
df[1:500,]

为了保留名称,我们可以生成数据帧列表:

newdat <- lapply(mtcars, function(x){
  dat <- data.frame(ind = rownames(mtcars), out = x)
  dat <- dat[order(dat$out),]
})
newdat尝试类似的方法(以
mtcars
为例):

现在让我们对每列进行排序:

> mtcars[] <- lapply(mtcars, sort)
您还可以看到,行名称不再提供信息。请确保这是你想要的。要获得新数据帧中最小的500行以便保存,只需使用常规子集,例如
df[1:500,]

为了保留名称,我们可以生成数据帧列表:

newdat <- lapply(mtcars, function(x){
  dat <- data.frame(ind = rownames(mtcars), out = x)
  dat <- dat[order(dat$out),]
})

newdat使用您的虚拟数据,我们可以循环“subject”列2:n,然后排序并写出前2个结果:

# dummy data
df <- read.table(text="Name  Math Science PE
David  90    70    25
Tom    100   60    40
John   30    40    100", header = TRUE)


# loop and write csv for top 2 scores
lapply(colnames(df)[2:ncol(df)], function(i){
  res <- df[, c("Name", i)]
  res <- res[order(res[, i], decreasing = TRUE),]
  write.csv(head(res, 2), file = paste0(i, ".csv"))
})
#虚拟数据

df使用您的虚拟数据,我们可以循环通过“主题”列2:n,然后排序,并写出前2个结果:

# dummy data
df <- read.table(text="Name  Math Science PE
David  90    70    25
Tom    100   60    40
John   30    40    100", header = TRUE)


# loop and write csv for top 2 scores
lapply(colnames(df)[2:ncol(df)], function(i){
  res <- df[, c("Name", i)]
  res <- res[order(res[, i], decreasing = TRUE),]
  write.csv(head(res, 2), file = paste0(i, ".csv"))
})
#虚拟数据


df我希望在对每一列进行排序时更改行名称,那么我会在for循环中使用apply吗?第一列是一个变量负载,另一列表示不同的扇区。对于每个扇区,我试图对变量进行排序并保存最上面的变量,这样之后我将编写另一个循环来绘制每个扇区。希望这能让你sense@OliPaul将行名添加为新列,然后进行排序
mtcars$myNames它们已经是了,但是在循环中排序时,名称不是值,我不希望它们被排序。名称是一列,我只是不希望该列成为循环的一部分,在循环中我要排序和保存多个csv,然后用包含名称的列的名称替换
rownames(mtcars)
。同样,您需要用数据集的名称替换
mtcars
。在任何情况下,如果要保留名称,还需要对它们进行排序,上面的解决方案向您展示了如何做到这一点。我希望在对每个列进行排序时更改行名称,那么我还会在for循环中使用apply吗?第一列是一个变量负载,另一列表示不同的扇区。对于每个扇区,我试图对变量进行排序并保存最上面的变量,这样之后我将编写另一个循环来绘制每个扇区。希望这能让你sense@OliPaul将行名添加为新列,然后进行排序
mtcars$myNames它们已经是了,但是在循环中排序时,名称不是值,我不希望它们被排序。名称是一列,我只是不希望该列成为循环的一部分,在循环中我要排序和保存多个csv,然后用包含名称的列的名称替换
rownames(mtcars)
。同样,您需要用数据集的名称替换
mtcars
。在任何情况下,如果你想保留这些名称,也需要对它们进行排序,上面的解决方案向你展示了如何做到这一点。
不确定如何根据I命名文件。
-使用
粘贴0(“myFile”,I,.csv”)
你的帖子不是很清楚,可能因为太宽而关闭。请添加输入数据和预期输出<代码>应用
只是循环
的一个美化版本,所以使用哪一个取决于您。我的编辑信息是否足够?谢谢您的编辑,名称是行名还是列?它已经是列了,因此为什么在我的示例开始时我使用stru length作为名称()由于这是唯一一个名称超过2个字母的列-数据表来自csv,我想我可以将该列定义为名称,不确定这是否是更好的做法。
不确定如何根据I命名文件。
-使用
粘贴0(“myFile”,I,.csv”)
您的帖子不太清楚,可能因为太宽而关闭。请添加输入数据和预期输出<代码>应用
只是循环
的一个美化版本,所以使用哪一个取决于您。我的编辑信息是否足够?谢谢您的编辑,名称是行名还是列?它已经是列了,因此为什么在我的示例开始时我使用stru length作为名称()由于这是唯一一个名称超过2个字母的列-数据表来自csv,我想我可以将该列定义为名称,不确定这是否是更好的做法。
# dummy data
df <- read.table(text="Name  Math Science PE
David  90    70    25
Tom    100   60    40
John   30    40    100", header = TRUE)


# loop and write csv for top 2 scores
lapply(colnames(df)[2:ncol(df)], function(i){
  res <- df[, c("Name", i)]
  res <- res[order(res[, i], decreasing = TRUE),]
  write.csv(head(res, 2), file = paste0(i, ".csv"))
})