【问题标题】:R - Replacing values in a dataframeR - 替换数据框中的值
【发布时间】:2014-12-15 13:52:04
【问题描述】:

我有一个data.frame,其中包含WIND_CHILLDRY_BULB_TEMPWIND_SPEED 的值。 当WIND_SPEED <= 5 然后我想设置WIND_CHILL = DRY_ BULB TEMP,因为在这些速度下WIND_CHILL 的公式不能有效地估计温度。 WIND_CHILL 是第 9 列,DRY_BULB_TEMP 是第 4 列,WIND_SPEEDdata.frame 中的第 7 列。 data.frame 称为 venue。我告诉你们这些是为了让你们了解我的尝试,即:

n <- nrow(venue)
for(i in 1:n) {
     if(venue[n,7] <= 5) {
       venue[n,9] <- venue[n,4]
     }
}

有什么想法吗??

【问题讨论】:

  • 以后请发布您的数据样本,以便其他人可以更轻松地重现您的错误。为了解决您的问题,您不需要 for 循环来执行此操作 - 我认为像 venue[,9] &lt;- ifelse(venue[,7]&lt;=5, venue[,4], venue[,9]) 这样的东西应该可以正常工作。

标签: r if-statement subset


【解决方案1】:

由于您没有提供您的data.frame,我不得不这样做:P。

venue[venue$WIND_SPEED<=5,"WIND_CHILL"]=venue[venue$WIND_SPEED<=5,"DRY_BULB_TEMP"]

或:

venue[venue$WIND_SPEED<=5,9]=venue[venue$WIND_SPEED<=5,4]

【讨论】:

  • 当在venue 内部使用时,您的WIND_CHILLDRY_BULB_TEMP 应该是"WIND_CHILL""DRY_BULB_TEMP"venue$WIND_CHILLvenue$DRY_BULB_TEMP。除此之外,您的方法看起来是正确的。
  • 哎呀,还有错别字
【解决方案2】:

所以,我无权访问您的数据集,所以我必须想出一个简单的例子。

x1<-rnorm(100,mean=0,sd=10)
x2<-rep(0,100)
x3<-rep(1,100)

df<-data.frame(x1,x2,x3)

summary(df$x2)

#overwrite x2 for values of x1 less than 3 
df$x2[ which(df$x1 < 3) ] <- 1

summary(df$x2)

summary(df$x3)
#overwrite x3 for values of x1 >= 3
df$x3[ which(df$x1 >= 3) ] <- 0

summary(df$x3)

您会注意到我们有一个包含 3 个变量的数据框。 x1 是一个随机变量,x2 和 x3 是 x1 的名义化(如果 x1 = 3,x3 应该是 0)。当我运行它时,您会注意到使用 which 语句有助于选择性地覆盖值,因为它返回需要被覆盖的索引。

> x1<-rnorm(100,mean=0,sd=10)
> x2<-rep(0,100)
> x3<-rep(1,100)
> 
> df<-data.frame(x1,x2,x3)
> 
> summary(df$x2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      0       0       0       0       0       0 
> 
> #overwrite x2 for values of x1 less than 3 
> df$x2[ which(df$x1 < 3) ] <- 1
> 
> summary(df$x2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00    0.00    1.00    0.58    1.00    1.00 
> 
> summary(df$x3)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1       1       1       1       1       1 
> #overwrite x3 for values of x1 >= 3
> df$x3[ which(df$x1 >= 3) ] <- 1
> 
> summary(df$x3)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1       1       1       1       1       1 
> x1<-rnorm(100,mean=0,sd=10)
> x2<-rep(0,100)
> x3<-rep(1,100)
> 
> df<-data.frame(x1,x2,x3)
> 
> summary(df$x2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      0       0       0       0       0       0 
> 
> #overwrite x2 for values of x1 less than 3 
> df$x2[ which(df$x1 < 3) ] <- 1
> 
> summary(df$x2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00    0.00    1.00    0.63    1.00    1.00 
> 
> summary(df$x3)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1       1       1       1       1       1 
> #overwrite x3 for values of x1 >= 3
> df$x3[ which(df$x1 >= 3) ] <- 0
> 
> summary(df$x3)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00    0.00    1.00    0.63    1.00    1.00 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 2022-01-14
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2012-06-19
    • 2012-10-01
    • 2015-07-15
    相关资源
    最近更新 更多