【问题标题】:Titanic dataset in RR中的泰坦尼克号数据集
【发布时间】: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


【解决方案1】:

这有帮助吗?

T1<-T[T$Freq==0,] # data with zero frequency
T2<-T[rep(row.names(T),T$Freq),] #data with nonzero frequency
T3<-rbind(T1,T2) #full data 
rownames(T3) <- 1:nrow(T3) #reset row index of full data

输出

> head(T3,20) Class Sex Age Survived Freq 1 1st Male Child No 0 2 2nd Male Child No 0 3 Crew Male Child No 0 4 1st Female Child No 0 5 2nd Female Child No 0 6 Crew Female Child No 0 7 Crew Male Child Yes 0 8 Crew Female Child Yes 0 9 3rd Male Child No 35 10 3rd Male Child No 35 11 3rd Male Child No 35 12 3rd Male Child No 35 13 3rd Male Child No 35 14 3rd Male Child No 35 15 3rd Male Child No 35 16 3rd Male Child No 35 17 3rd Male Child No 35 18 3rd Male Child No 35 19 3rd Male Child No 35 20 3rd Male Child No 35

【讨论】:

  • 只是添加一个更改 => actual_titanic &lt;- as.data.frame(T3, stringsAsFactors=FALSE)
猜你喜欢
  • 2019-03-01
  • 2021-07-29
  • 2022-07-25
  • 2020-10-25
  • 2017-06-27
  • 2016-06-19
  • 2022-01-03
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多