0

在我的大型数据集中,我有一个名为汽车密度(因素)的列,它们就像

"001: 0-3.8998943958"
"061:2290.611052-2391.7437"

我想用每个范围的中位数替换这些。有近 10000 个观测值。我尝试了很长的路: "1.9499"<-sb$CAR_Density[sb$CAR_Density == "001: 0-3.8998943958"],但没有奏效。我不应该将“”放在 1.9499 上,因为我希望结果值是数字。

有没有一种有效且易于理解的方法来做到这一点?我不太擅长编程,请帮助。

4

2 回答 2

0

我认为你有错误的方式,你想要

sb$CAR_Density[sb$CAR_Density == "001: 0-3.8998943958"] <- 1.9499

如果您告诉我们更多有关您的数据的信息,我们可以展示一种用中位数替换每个唯一值的自动方法 - 但在您的示例中,我不知道密度如何转换为中位数。

于 2013-10-31T05:12:29.433 回答
0

我不确定您如何定义中位数,但我认为您正在尝试实现以下目标:

df <- data.frame(
  a = c("001: 0-3.8998943958","061:2290.611052-2391.7437")
  )
df$a <- as.character(df$a)
for(i in 1:nrow(df))
{
df[i,"a1"] <- as.numeric(unlist(strsplit(strsplit(df$a,":")[[i]][2],"-")))[1]
df[i,"a2"] <- as.numeric(unlist(strsplit(strsplit(df$a,":")[[i]][2],"-")))[2]
}

df$amedian <- (df$a1 + df$a2)/2

输出

> df
                          a       a1          a2     amedian
1       001: 0-3.8998943958    0.000    3.899894    1.949947
2 061:2290.611052-2391.7437 2290.611 2391.743700 2341.177376
于 2013-10-31T05:21:21.960 回答