我有一个类似下面的通用数据集的数据集,并希望将三个sitevariables合并为一个。
-bash-4.1$ ps -ef | grep gradle
11831 26400 1920 19 15:33 pts/1 00:00:03 /opt/jdk1.7.0_10//bin/java -Dorg.gradle.appname=gradle -classpath /DATA/maas_slave/tools/hudson.plugins.gradle.GradleInstallation/gradle-2.13-rc-1/lib/gradle-launcher-2.13-rc-1.jar org.gradle.launcher.GradleMain --no-daemon zipAlign
11831 26440 26400 20 15:33 pts/1 00:00:03 /opt/jdk1.7.0_10/bin/java -Xmx2048M -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /DATA/maas_slave/tools/hudson.plugins.gradle.GradleInstallation/gradle-2.13-rc-1/lib/gradle-launcher-2.13-rc-1.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.13-rc-1
我希望获得的数据框应该是这样的:
-bash-4.1$ ps -ef | grep gradle
11831 1918 1920 26 15:50 pts/1 00:00:02 /opt/jdk1.7.0_10//bin/java -Dorg.gradle.daemon=false -Dorg.gradle.appname=gradle -classpath /DATA/maas_slave/tools/hudson.plugins.gradle.GradleInstallation/gradle-2.13-rc-1/lib/gradle-launcher-2.13-rc-1.jar org.gradle.launcher.GradleMain zipAlign
11831 1962 1918 29 15:50 pts/1 00:00:02 /opt/jdk1.7.0_10/bin/java -Xmx2048M -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /DATA/maas_slave/tools/hudson.plugins.gradle.GradleInstallation/gradle-2.13-rc-1/lib/gradle-launcher-2.13-rc-1.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.13-rc-1
我尝试在sqldf包中使用coalesce,它提供正确的输出,但str()显示输出是一个带有一个变量的数据框。而不是我需要的一系列因素。
df <- data.frame(var1 = c("site1", NA, NA, NA, "site3", "site4"),
var2 = c(NA, NA, "NA", "site2", NA, "site4"),
var3 = c("site1", NA, "Site2", "site2", "site3", NA))
var1 var2 var3
1 site1 <NA> site1
2 <NA> <NA> <NA>
3 <NA> NA Site2
4 <NA> site2 site2
5 site3 <NA> site3
6 site4 site4 <NA>
答案 0 :(得分:2)
您可以使用na.locf
包中的zoo
来获取var4,
library(zoo)
df$var4 <- na.locf(t(df))[ncol(df),]
df
# var1 var2 var3 var4
#1 site1 <NA> site1 site1
#2 <NA> <NA> <NA> <NA>
#3 <NA> NA Site2 Site2
#4 <NA> site2 site2 site2
#5 site3 <NA> site3 site3
#6 site4 site4 <NA> site4
答案 1 :(得分:2)
另一个选择是使用这样的东西:
cd /path/to/my/repo
git check-ignore -v -- .gitignore
输出如下:
df$var4 <- apply(df, 1, min, na.rm = TRUE)
答案 2 :(得分:1)
您可以使用cbind()合并两个数据框,如:
error: no matching function for call to ‘std::vector<int>::erase(__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type&)’
t.erase(t.at(i));
然后通过
更改colnametmp = sqldf("select coalesce(var1, var2, var3) from df")
df = cbind(df, tmp)
答案 3 :(得分:1)
也许这可能是一个可能的解决方案:
colnames(df)[4] = 'var4'
请注意,最后一列是字符向量,但您可以根据需要轻松转换为因子(使用df<- data.frame(var1 = c("site1", NA, NA, NA, "site3", "site4"),
var2 = c(NA, NA, "NA", "site2", NA, "site4"),
var3 = c("site1", NA, "Site2", "site2", "site3", NA))
getLastNonNA <- function(v){
notNAs <- !is.na(v)
if(!any(notNAs))
return(NA)
tail(v[notNAs],1)
}
# if you prefer the first non-NA
#getFirstNonNA <- function(v){
# notNAs <- !is.na(v)
# if(!any(notNAs))
# return(NA)
# head(v[notNAs],1)
#}
df$var4 <- apply(df,1,getLastNonNA)
> df
var1 var2 var3 var4
1 site1 <NA> site1 site1
2 <NA> <NA> <NA> <NA>
3 <NA> NA Site2 Site2
4 <NA> site2 site2 site2
5 site3 <NA> site3 site3
6 site4 site4 <NA> site4
)。
答案 4 :(得分:1)
我们可以使用max.col
df$var4 <- df[cbind(1:nrow(df), max.col(!is.na(df), "first"))]
df
# var1 var2 var3 var4
#1 site1 <NA> site1 site1
#2 <NA> <NA> <NA> <NA>
#3 <NA> <NA> Site2 Site2
#4 <NA> site2 site2 site2
#5 site3 <NA> site3 site3
#6 site4 site4 <NA> site4