R 使用另一个数据集创建单列数据帧
我有一个如下所示的数据集:R 使用另一个数据集创建单列数据帧,r,syntax,data.table,summary,R,Syntax,Data.table,Summary,我有一个如下所示的数据集: set.seed(1) DF <- data.table(panelID = sample(50,50), # Creates a panel ID Country = c(rep("A",30),rep("B",50), rep("C",20)),
set.seed(1)
DF <- data.table(panelID = sample(50,50), # Creates a panel ID
Country = c(rep("A",30),rep("B",50), rep("C",20)),
Group = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
norm = round(runif(100)/10,2),
Income = sample(100,100),
Happiness = sample(10,10),
Sex = round(rnorm(10,0.75,0.3),2),
Age = round(rnorm(10,0.75,0.3),2),
Educ = round(rnorm(10,0.75,0.3),2))
DF [, uniqueID := .I]
DF <- as.data.table(DF) # Make sure it is a data.table
DF [, uniqueID := .I] # Add a unique ID
cols = sapply(DF, is.numeric) # Check numerical columns
DFm <- melt(DF[, cols, with = FALSE][, !"uniqueID"], id = "panelID") # https://stackoverflow.com/questions/57406654/speeding-up-a-function/57407959#57407959
DFm[, value := c(NA, diff(value)), by = .(panelID, variable)] # https://stackoverflow.com/questions/57406654/speeding-up-a-function/57407959#57407959
DF <- dcast(DFm, panelID + rowidv(DFm, cols = c("panelID", "variable")) ~ variable, value.var = "value") # ""
DF <- DF[DF[, !Reduce(`&`, lapply(.SD , is.na)), .SDcols = 3:ncol(DF)]] # Removes T1 for which there is no difference
set.seed(1)
这是你需要的吗DF[,lappy(.SD,mean)]
?哈哈,那很可能是,但是我在哪里指定不包括NA,在哪里指定它应该只选择数字列(我需要这个用于实际数据集)?可能有一个更简单的方法:DF[,lappy(Filter(is.integer.SD),mean,NA.rm=TRUE)]
使用int,因为所有的都是数字。还有一件事。。如果我想取平方或绝对值的平均值。我应该把abs放在哪里?我想你可以在lapply中使用lambda。类似(纯粹说明性的):DF[,lappy(Filter(is.integer,.SD),function(x)mean(abs(x)/sqrt(x),na.rm=TRUE)]
。可能还有更优雅的方式。这是你需要的吗DF[,lappy(.SD,mean)]
?哈哈,那很可能是,但是我在哪里指定不包括NA,在哪里指定它应该只选择数字列(我需要这个用于实际数据集)?可能有一个更简单的方法:DF[,lappy(Filter(is.integer.SD),mean,NA.rm=TRUE)]
使用int,因为所有的都是数字。还有一件事。。如果我想取平方或绝对值的平均值。我应该把abs放在哪里?我想你可以在lapply中使用lambda。类似(纯粹说明性的):DF[,lappy(Filter(is.integer,.SD),function(x)mean(abs(x)/sqrt(x),na.rm=TRUE)]
。也许还有更优雅的方式。
mean_of_differences <- DF [, mean(sapply(.SD, is.numeric), na.rm=TRUE)]
mean_of_differences <- DF[,.SD[mean(sapply(.SD, is.numeric), na.rm=TRUE)]]