specdata <- list.files(getwd(), pattern="*.csv")
directory <- lapply(specdata, read.csv)
directory_final <- do.call(rbind, directory)
library(tidyverse)
one <- select(directory_final, nitrate, ID)
two <- no.omit(one)
a <- select(directory_final, sulfate, ID)
b <- na.omit(a)
two_df <- mutate(two, id = rownames(two))
b_df <- mutate(b, id = rownames(b))
library(plyr)
alpha <- join(two_df, b_df, by = "id", match = "all")
alpha$id <- NULL
dput(head(alpha, 5))
structure(list(sulfate = c(7.21, 5.99, 4.68, 3.47, 2.42), ID = c(1L,
1L, 1L, 1L, 1L), nitrate = c(0.651, 0.428, 1.04, 0.363, 0.507
), ID = c(1L, 1L, 1L, 1L, 1L)), row.names = c(NA, 5L), class = "data.frame")
dim(alpha)
118783 4
这样想吧;我有两条长绳,一根长10m,另一根长12m。一个字符串是红色,另一字符串是蓝色。两根弦在整个弦上的间隔均为0.05厘米。每10节,我给每个单独的结点ID-1代表红色,ID1-1代表蓝色,依此类推。但是,我手上都有每根弦。我希望这两个字符串成为一个长字符串,并排合并。因此,我将字符串的顶部和末端绑在一起。现在,如果我想要一个单独的结,即ID-1的长度为ID-1字符串的1/10,则解开第一个结,依此类推。 –我想要一个函数,该函数可以让我查找从ID-1(范围为1:332)或ID1-1(范围为1:332)解开的每个结的平均值。
我想要类似的东西
alpha_function(nitrate, ID = 1:50)
alpha_function(sulfate, ID = 1:50)
可以通过ID收集硝酸盐或硫酸盐所有平均值的函数
另外,当我使用“ join”功能时,我只能取我放置在此功能中的第一个data.frame(b_df)的平均值。而第二个总是返回NA。
mean(alpha$sulfate)
3.189369
mean(alpha$nitrate)
NA
我还想知道为什么会发生这种情况,以及如何解决这个问题以便可以取两个总值?
答案 0 :(得分:0)
以下功能可能会有所帮助:
combine.df <- function(df1,df2){
n <- max(nrow(df1),nrow(df2))
cbind(df1[1:n,],df2[1:n,])
}
该函数的逻辑是,当R提供超出范围的索引时,R会自动插入NA
。
如果数据框的行数不同,则多余的行将具有类似NA, NA.1, NA.2, ...
的名称。如果您不喜欢该功能,则可以使用此功能的以下版本:
combine.df <- function(df1,df2){
n <- max(nrow(df1),nrow(df2))
df <- cbind(df1[1:n,],df2[1:n,])
row.names(df) <- 1:n
df
}