【发布时间】:2017-12-07 17:07:41
【问题描述】:
我正在尝试解决 R 中“泰坦尼克号”数据集的问题。
在此数据中,最后一列给出了观察频率('freq' 列)。 例如 - 第三行表示频率 = 35,这意味着该特定行将重复 35 次。
因此,我正在编写一个新数据帧,其中所有频率 > 0 的行都被打印了很多次(第 3 行被附加到新数据帧中,35 次)。
新数据框的总行数=2201,即频率列所有值的总和。
我使用长度为 2201 的字符向量来存储第一列“类”的所有值,我将在其中附加值。
我写了以下代码-
data(Titanic)
# View(Titanic)
# create a data frame out of 'Titanic' data frame-
T <- as.data.frame(Titanic, stringsAsFactors = FALSE)
# cat("Total # of observations - ", sum(T$Freq)) # O/P = 2201
n <- sum(T$Freq)
# full_titanic <- data.frame(Class = character(n), Sex = character(n), Age = character(n), Survived = character(n), stringsAsFactors=FALSE)
full_Class <- character(n) # create an array of 2201 character objects
for(i in 1:nrow(T))
{
if(T$Freq[i] > 0)
{
cnt = T$Freq[i]
# repeating_val <- T$Class[i]
j <- 0
while(j < cnt)
{
# full_Class[i] <- repeating_val
full_Class[i + j] <- T$Class[i]
# cat("T$Class[", i, "] = ", T$Class[i], "\n")
# cat("Repeating for i = ", i, "\n")
j <- j + 1
}
}
else
{
full_Class[i] <- T$Class[i]
}
# cat("i = ", i, "\n")
}
但是,当我打印这段代码时,它会在字符向量“full_Class”中留下很多空白。
我可以看到差异为-
table(full_Class) # shows the sum of all classes = 1520
sum(T$Freq[T$Class == "1st"]) # equals 325
sum(T$Freq[T$Class == "2nd"]) # equals 285
sum(T$Freq[T$Class == "3rd"]) # equals 706
sum(T$Freq[T$Class == "Crew"]) # equals 885
(325 - 67) + (285 - 11) + (706 - 63) + (885 - 540) # equalss 1520
怎么了?
谢谢!
【问题讨论】:
-
假设数据在
d1中并且带有Freq == 0的行被删除:d1[rep(1:nrow(d1), d1$Freq), ] -
删除带有
Freq == 0行的数据会给我一个数据集,其中我缺少这些行。我想获得一个包含所有数据的新数据集。 -
你如何重复某件事0次?
-
你不要重复它,你只是包含它。有 8 个这样的行是 - 1 2 4 5 6 8 20 24 ('Freq == 0')
-
那么我建议你在你的问题中编辑这个短语:“因此我正在编写一个新的数据帧,其中所有频率 > 0 的行都被打印了很多次(行号3 被追加到新的数据框中,35 次)。”
标签: r