簡體   English   中英

嘗試通過循環創建數據框

[英]Trying to create a dataframe as result of a loop

我正在嘗試創建一個循環的數據框:

variation <- seq(0.10, 3, 0.5)
for (i in seq_along(variation)) {
  x <- iris %>% mutate(newLength = Sepal.Length + variation[i])
  newSum <- x %>% summarise(newSum = sum(newLength))
  oldSum <- iris %>% summarise(oldSum = sum(Sepal.Length))

  df <- cbind(variation[i], oldSum, newSum)
  z <- rbind(df)
  print(z)
}

我得到的輸出是:

  variation[i] oldSum newSum
1          0.1  876.5  891.5
  variation[i] oldSum newSum
1          0.6  876.5  966.5
  variation[i] oldSum newSum
1          1.1  876.5 1041.5
  variation[i] oldSum newSum
1          1.6  876.5 1116.5
  variation[i] oldSum newSum
1          2.1  876.5 1191.5
  variation[i] oldSum newSum
1          2.6  876.5 1266.5

我想要的輸出是:

 variation[i] oldSum newSum
         0.1  876.5  891.5
         0.6  876.5  966.5
         1.1  876.5 1041.5
         1.6  876.5 1116.5
         2.1  876.5 1191.5
         2.6  876.5 1266.5

我究竟做錯了什么?

rbind()將多行綁定在一起。 如果只給它一個df,它將僅返回該數據幀。 嘗試rbind(z,df)將新的DF附加到舊的z。

variation <- seq(0.10, 3, 0.5)
for (i in seq_along(variation)) {
  x <- iris %>% 
    mutate(newLength = Sepal.Length + variation[i])
newSum <- x %>% 
    summarise(newSum = sum(newLength))
oldSum <- iris %>% 
  summarise(oldSum = sum(Sepal.Length))    
df <- cbind(variation[i], oldSum, newSum)
z <- rbind(z,df)
print(z)
}

請注意,z不會被清除,因此您可能希望在開始循環之前對其進行初始化。 z = NULL之類的東西可以確保它為空。

您應該嘗試使用outer向量函數來進行分析的主要復雜部分:

data.frame(
  variation,
  oldSum=sum(iris$Sepal.Length),
  newSum=colSums(outer(iris$Sepal.Length, variation, FUN=`+`))
)

#  variation oldSum newSum
#1       0.1  876.5  891.5
#2       0.6  876.5  966.5
#3       1.1  876.5 1041.5
#4       1.6  876.5 1116.5
#5       2.1  876.5 1191.5
#6       2.6  876.5 1266.5

正如@Frank指出的那樣,您可以進一步簡化/加快此過程:

sum.sl <- sum(iris$Sepal.Length)
data.frame(
  variation,
  oldSum=sum.sl,
  newSum=sum.sl + length(iris$Sepal.Length)*variation
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM