首页 > 解决方案 > 在 R 的循环中重命名采样属性

问题描述

我想更改从循环中采样的列中的属性名称。在第一个for循环中,我从整个数据集中抽取一个样本,在第二个for循环中,将此样本放在我创建的一个空数据框中。除了重命名代码外,一切都按我的需要运行。我的重命名解决方案几乎可以工作,但我需要按从 1 到 9 的顺序进行重命名。

使用虚拟数据:

AllFruit <- read.table("AllFruitData.txt")

for (i in 1:1000) {

Fruit.sample <- sample(AllFruit$Weight, size = 9, replace = TRUE) #create a sample based on weight of fruit

WeightSample <- NULL #create an empty dataframe

for (k in 1:length(Fruit.sample)) {

WeightSample = rbind(WeightSample, AllFruit[which(AllFruit$Weight == Fruit.sample[k]),])
}
}

这会产生什么:

WeightSample

Type    Color   Weight 
Apple   Red     5
Banana  Yellow  5
Apple   Red     5
Apple   Red     9
Banana  Yellow  9
Orange  Orange  7
Pear    Green   3
Banana  Yellow  8
Pear    Green   6
Pear    Green   2
Banana  Yellow  1
Pear    Green   1
Pear    Green   4

我需要的:

Type    Color   Weight 
Apple   Red     1
Banana  Yellow  1
Apple   Red     1
Apple   Red     2
Banana  Yellow  2
Orange  Orange  3
Pear    Green   4
Banana  Yellow  5
Pear    Green   6
Pear    Green   7
Banana  Yellow  8
Pear    Green   8
Pear    Green   9

要重命名权重列中的权重,我推断我需要更改箭头的右侧,因为当我将其添加到rbind行后的第二个循环中时:

WeightSample[WeightSample$Weight == Fruit.sample[k], "Weight"] <- 13

我得到:

Type    Color   Weight 
Apple   Red     13
Banana  Yellow  13
Apple   Red     13
Apple   Red     13
Banana  Yellow  13
Orange  Orange  13
Pear    Green   13
Banana  Yellow  13
Pear    Green   13
Pear    Green   13
Banana  Yellow  13
Pear    Green   13
Pear    Green   13

我尝试了一些选项,例如seq(1:9)但出现替换错误。由于我要采样 1000 次,因此我需要一个解决每个新样本重量的解决方案。谢谢!

标签: rfor-looprename

解决方案


我们可以用

WeightSample$Weight <- with(WeightSample, match(Weight, unique(Weight)))

-输出

 WeightSample
     Type  Color Weight
1   Apple    Red      1
2  Banana Yellow      1
3   Apple    Red      1
4   Apple    Red      2
5  Banana Yellow      2
6  Orange Orange      3
7    Pear  Green      4
8  Banana Yellow      5
9    Pear  Green      6
10   Pear  Green      7
11 Banana Yellow      8
12   Pear  Green      8
13   Pear  Green      9

数据

WeightSample <- structure(list(Type = c("Apple", "Banana", "Apple", "Apple", 
"Banana", "Orange", "Pear", "Banana", "Pear", "Pear", "Banana", 
"Pear", "Pear"), Color = c("Red", "Yellow", "Red", "Red", "Yellow", 
"Orange", "Green", "Yellow", "Green", "Green", "Yellow", "Green", 
"Green"), Weight = c(5L, 5L, 5L, 9L, 9L, 7L, 3L, 8L, 6L, 2L, 
1L, 1L, 4L)), class = "data.frame", row.names = c(NA, -13L))

推荐阅读