Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用ave而不使用NA值?_R - Fatal编程技术网

在R中使用ave而不使用NA值?

在R中使用ave而不使用NA值?,r,R,我有一个巨大的数据帧。它看起来像这样: > b fips vix 1400 08005 18.58862 1401 47155 10.93712 1402 51191 10.93712 1403 47059 10.93712 1404 08005 10.93712 1405 08059 10.93712 1406 47063 10.93712 1407 37021 10.93712 1408 08031 10.93712 1409 45083 1

我有一个巨大的数据帧。它看起来像这样:

> b
       fips      vix
1400  08005 18.58862
1401  47155 10.93712
1402  51191 10.93712
1403  47059 10.93712
1404  08005 10.93712
1405  08059 10.93712
1406  47063 10.93712
1407  37021 10.93712
1408  08031 10.93712
1409  45083 10.93712
1410  37089 10.93712
1411  37113 10.93712
1412  13207 10.93712
1413  08041 10.93712
1414  47093 21.50425
1415  08031 21.50425
1416  37009 21.50425
1417  36103 21.50425
1418  08035 21.50425
1419  08031 53.58363
1420  08035 53.58363
1421  08013 53.58363
1422  55105 21.17450
1423  08001 21.17450
1424  08031 21.17450
1425  47179 21.17450
1426  08059 21.17450
1427  37009 17.35675
1428  08041 17.35675
1429  08031 17.35675
1430  08005 17.35675
1431  08001       NA
1432  08031       NA
1433  47059       NA
1434  47145       NA
1435  13207       NA
1436  37021       NA
1437  37113       NA
1438  37089       NA
为了简单起见,我去掉了一些列,只显示了一小部分行。 我正在尝试更改Vix列。我想做的是:

b$vix <- b$vix - ave(b$vix,b$fips)
b$vix b$vix b
fips vix
1400  08005   2.961125
1401  47155   0.000000
1402  51191   0.000000
1403 47059 NA
1404  08005  -4.690375
1405  08059  -5.118688
1406  47063   0.000000
1407 37021纳
1408 08031 NA
1409  45083   0.000000
1410 37089北美
141137113北美
141213207北美
1413  08041  -3.209812
1414  47093   0.000000
1415 08031 NA
1416  37009   2.073750
1417  36103   0.000000
1418  08035 -16.039688
1419 08031北美
1420  08035  16.039688
1421  08013   0.000000
1422  55105   0.000000
1423 08001北美
1424 08031北美
1425  47179   0.000000
1426  08059   5.118688
1427  37009  -2.073750
1428  08041   3.209812
1429 08031北美
1430  08005   1.729250
1431 08001北美
14320831北美
1433 47059 NA
143447145 NA
143513207北美
143637021纳
143737113北美
143837089纳
如您所见,任何具有NA的FIP现在都将为具有相同FIP的所有其他行提供NA。 我尝试添加na.rm=TRUE,但这没有任何作用。我还考虑添加一个不同的函数,即ave(b$vix,b$fips,FUN=…),但我不知道添加什么。也许还有另一种方法可以做到这一点。
我希望我能把问题解释清楚。感谢您的任何帮助

您只需使用自定义函数将
na.rm=TRUE
标志传递给
mean()

b$vix <- b$vix - ave(b$vix,b$fips, FUN=function(x) mean(x, na.rm=T))
b$vix
b$vix <- b$vix - ave(b$vix,b$fips, FUN=function(x) mean(x, na.rm=T))
b<-read.table(text="      fips      vix
08005 18
08005 19
08005 20
47155 10
47155 NA
47155 20", header=T)

b$vix <- b$vix - ave(b$vix,b$fips, FUN=function(x) mean(x, na.rm=T))
b
#    fips vix
# 1  8005  -1
# 2  8005   0
# 3  8005   1
# 4 47155  -5
# 5 47155  NA
# 6 47155   5