我试图找到在我正在研究的数据框中无法幸存的人数最多的人。我使用了for循环遍历行,但是遇到了问题。如果条件正常,这似乎不像我。据说最大的数字是89,但实际上是670。
most_lost <- 0
for (i in 1:dim(Titanic)[1]) {
if (Titanic$Survived[i] == "No") {
if (Titanic$Freq[i] > most_lost) {
most_lost <- Titanic$Freq[i]
}
print(most_lost)
}
}
这是打印的most_lost
的输出[1] 0
[1] 0
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "387"
[1] "670"
[1] "670"
[1] "670"
[1] "89"
[1] "89"
这是我正在使用的桌子
答案 0 :(得分:2)
能否请您检查表中的数据格式,例如Freq是否真的是数字?使用以下示例数据,您的代码对我有用-请参见以下代码。附带说明一下,最好不要将数据以图形形式发布,而是使用例如dput(data)
并发布其输出,这样其他人可以更轻松地导入您的数据并检查其结构。您可以相应地编辑问题。
在任何情况下,我都想强调一点,对于您描述的任务,您不应使用循环,而应仅对表进行子集化,因为对于具有较大数据集的此类任务,循环的速度会令人无法接受。我在下面的代码末尾提供了一个示例。
Titanic = as.data.frame(cbind(Survived = rep("No", 8), Freq = c(1,2,5,0,2,3,1,1)), stringsAsFactors = F)
# Survived Freq
# 1 No 1
# 2 No 2
# 3 No 5
# 4 No 1
# 5 No 2
# 6 No 3
# 7 No 1
# 8 No 1
most_lost <- 0
for (i in 1:dim(Titanic)[1]) {
if (Titanic$Survived[i] == "No") {
if (Titanic$Freq[i] > most_lost) {
most_lost <- Titanic$Freq[i]
}
print(most_lost)
}
}
# [1] "1"
# [1] "2"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"
max(Titanic[Titanic$Survived == "No", "Freq"])
# [1] "5"
答案 1 :(得分:0)
如果我理解正确,则不需要for循环。
max(Titanic$Freq[Titanic$Survived == "No"])
此行通过Survived列为“ No”的行对Freq列进行子集设置,然后查找子集的Freq列的最大值。