我有一个数据框,有2组1时间变量和一个因变量.例如:
name <- c("a", "a", "a", "a", "a", "a","a", "a", "a", "b", "b", "b","b", "b", "b","b", "b", "b")
class <- c("c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3","c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3")
year <- c("2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008")
value <- c(100, 33, 80, 90, 80, 100, 100, 90, 80, 90, 80, 100, 100, 90, 80, 99, 80, 100)
df <- data.frame(name, …Run Code Online (Sandbox Code Playgroud) 这是我的第一篇文章,希望我能解释一下我需要做些什么.我对R来说还是很新,我可能已经阅读了回答这个问题的帖子,但我不能为我的生活理解他们的意思.如果已经回答,请提前道歉.
我有一个非常大的GPS位置数据集来自radiocollars,并且每天的位置数量不一致.我想浏览数据集,并根据GPS信号的准确度选择每天的单个数据点.
所以它基本上看起来像这样.
Accuracy Month Day Easting Northing Etc
5 6 1 ####### ######## #
3.2 6 1 ####### ######## #
3.8 6 1 ####### ######## #
1.6 6 2 ####### ######## #
4 6 3 ####### ######## #
3.2 6 3 ####### ######## #
Run Code Online (Sandbox Code Playgroud)
我想在保留其余相关数据的同时,为每天提取最准确的点(最低精度度量).
目前我一直在使用tapply功能
datasub1<-subset(data,MONTH==6)
tapply(datasub1$accuracy, datasub1$day, min)
Run Code Online (Sandbox Code Playgroud)
使用这种方法,我可以成功检索最小值,每天一个,但我不能采取相关的坐标和时间,以及所有其他重要信息以及它,因为数据集是近30万行,我真的可以不要手工做.
基本上,我需要获得与tapply相同的结果,但是我需要找到该点的整个行而不是单个点.
提前感谢任何可以伸出援助之手的人.如果您需要更多信息,请告诉我,我会尽力为您服务.
我试图找到data.frames从广泛创建汇总表的懒惰/简单方法data.frames.假设有一个以下data.frame,但是有更多列,因此指定列名需要很长时间:
set.seed(2)
x <- data.frame(Rep = rep(1:3, 4), Temp = c(rep(10,6), rep(20,6)),
pH = rep(c(rep(8.1, 3), rep(7.6, 3)), 2),
Var1 = rnorm(12, 5,2), Var2 = c(rnorm(6,4,1), rnorm(6,3,5)),
Var3 = rt(12, 20))
x[1:3] <- as.data.frame(apply(x[1:3], 2, function(x) as.factor(x)))
Run Code Online (Sandbox Code Playgroud)
现在,我可以计算汇总统计信息plyr:
(mu <- ddply(x, .(Temp, pH), numcolwise(mean)))
(std <- ddply(x, .(Temp, pH), numcolwise(sd)))
(n <- ddply(x, .(Temp, pH), numcolwise(length)))
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何同时应用所有这些功能:
ddply(x, .(Temp, pH), numcolwise(mean, sd, length))
Run Code Online (Sandbox Code Playgroud)
我当然可以合并各种摘要data.tables,但这不是一种"懒惰/简单"的方式.我正在寻找一些我可以在许多情况下应用的一般内容.这样的事情,除了应该可以使用单个函数生成:
xx <- merge(mu, std, by = c("Temp", "pH"), sotr = …Run Code Online (Sandbox Code Playgroud) 我看到ddply很好地按变量汇总和分组.我希望ddply只扫描一个非常大的数据帧,并为多个变量提供一个计数(长度).如何才能做到这一点?例如:
inc <- c('inc123', 'inc332', 'inc231', 'inc492', 'inc872', 'inc983')
hw <- c('ss23', 'ss43', 'ss98', 'ss98', 'ss23', 'ss23')
app <- c('lkl', 'dsd', 'lkl', 'jhj', 'lkl', 'dsd')
srvc <- c('rr', 'oo', 'rr', 'qq', 'qq', 'pp')
df <- data.frame(inc, hw, app, srvc)
ddply(df, .(hw), summarise, count = length(inc))
Run Code Online (Sandbox Code Playgroud)
以上将给我计算独特的hw的数量.如果我做
ddply(df, .(hw, app, srvc), summarise, count = length(inc))
Run Code Online (Sandbox Code Playgroud)
我的目标是丢失 - 因为ddply采用hw,app,srvc的每个"独特"组合并计算这些.
有没有办法在一次性中获得所有3个变量的计数?期望得到的df是这样的:(可能有不同的行数).
hw count
1 ss23 3
2 ss43 1
3 ss98 2
app count
1 dsd 2
2 jhj 1
3 linux 1 …Run Code Online (Sandbox Code Playgroud) 我有这样的数据框
test <- data.frame(id = rep(LETTERS[1:2],each = 3),
a = c(1,NA,NA,10,NA,NA),
b = c(2,NA,NA,20,NA,NA),
c = c(NA,3,NA,NA,30,NA),
d = c(NA,NA,4,NA,NA,40))
Run Code Online (Sandbox Code Playgroud)
我得到了这个数据帧,并希望将其转换为每个唯一的'id'只有一行,而数据帧中没有NA.
我这样做
ddply(test,
.variables = 'id',
.fun = function(df){
colSums(df[,1:4], na.rm = T)})
Run Code Online (Sandbox Code Playgroud)
获取此data.frame
id a b c d
1 A 1 2 3 4
2 B 10 20 30 40
Run Code Online (Sandbox Code Playgroud)
它有效,但是有一种更直接的方法可以不使用colSums,压缩行来为每个'id'创建一行,因为在每个'id'中,所有列只有一个值,其余的是NAs .我确实遇到了类似的请求,同时寻找其他东西,但现在找不到它!
谢谢
我有一个非常简单的问题,我相信有一个优雅的答案(我也确定上面的标题是不合适的).我有一个y值的向量:
y = matrix(c(1, 2, 3, 4, 5, 6, 7), nrow=7, ncol=1)
Run Code Online (Sandbox Code Playgroud)
我想对矩阵中的每一列进行回归,x:
x = matrix(c(1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 4, 4, 4, 4, 4, 4, 4), nrow=7, ncol=3)
Run Code Online (Sandbox Code Playgroud)
例如,我想将x的第一列与y线性回归,然后x的第二列对y进行线性回归,直到达到x的最后一列:
regression.1=lm(y~x[,1])
regression.2=lm(y~x[,2])
Run Code Online (Sandbox Code Playgroud)
我稍后想要绘制这些回归与其他参数的斜率,因此如果模型系数参数可以通过常规方式轻松访问,那将非常有用:
slope.1 = summary(regression.1)$coefficients[2,1]
Run Code Online (Sandbox Code Playgroud)
我正在使用像plyr这样的东西来猜测一个列表,但是我对这个游戏来说太新了,无法找到最简单的编码方法.
我有一个ddplyIP列表,并在每个IP上应用乐趣.我希望有趣的是只返回一个值nrow(ip.data) > 1.否则,我想ddply跳过该IP并继续.我怎样才能做到这一点?
例如:
pd.outs <- ddply(server_ips, .(ip), function(x) get.ip.outs(x$ip, data))
Run Code Online (Sandbox Code Playgroud)
nrow(ip.data) 将提供(数据)子集中行数的长度.
我试图计算每个因子级别的数据框中两个数字列之间的相关性.这是一个示例数据框:
concentration <-(c(3, 8, 4, 7, 3, 1, 3, 3, 8, 6))
area <-c(0.5, 0.9, 0.3, 0.4, 0.5, 0.8, 0.9, 0.2, 0.7, 0.7)
area_type <-c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B")
data_frame <-data.frame(concentration, area, area_type)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想计算每个level_type级别的浓度和面积之间的相关性.我想使用cor.test而不是cor,因为我想要p值和kendall tau值.我试过用ddply做到这一点:
ddply(data_frame, "area_type", summarise,
corr=(cor.test(data_frame$area, data_frame$concentration,
alternative="two.sided", method="kendall") ) )
Run Code Online (Sandbox Code Playgroud)
但是,我遇到输出问题:它的组织方式与正常的Kendall cor.test输出不同,后者表示z值,p值,备选假设和tau估计.而不是那样,我得到下面的输出.我不知道输出的每一行表示什么.此外,每个level_type级别的输出值都相同.
area_type corr
1 A 0.3766218
2 A NULL
3 A 0.7064547
4 A 0.1001252
5 A 0
6 A two.sided
7 A Kendall's rank correlation tau
8 A data_frame$area …Run Code Online (Sandbox Code Playgroud) 我想在每个字符串中找到大写字母,并计算每个字符串的数量,例如
t = c("gctaggggggatggttactactGtgctatggactac", "gGaagggacggttactaCgTtatggactacT", "gcGaggggattggcttacG")
ldply(str_match_all(t,"[A-Z]"),length)
Run Code Online (Sandbox Code Playgroud)
当应用上述功能时,我的输出是
1 4 2
Run Code Online (Sandbox Code Playgroud)
但我的愿望输出是
[1] G -1
[2] G -1 C -1 T -2
[3] G -2
I am looking for a readable alternative to plyr::mapvalues in data.table.
例如,在中plyr::mapvalues,如果我想将carbin 的值更改mtcars为type1, type2, type3,则可以执行以下操作:
library(tidyverse)
mtcars %>%
mutate(carb = plyr::mapvalues(
carb,
from = c("1", "2", "3", "4", "6", "8"),
to = c("type1", "type1", "type2", "type2", "type3", "type3")))
Run Code Online (Sandbox Code Playgroud)
为了获得相同的效果data.table,我会这样做,但这似乎不是常规方法:
library(data.table)
dt <- data.table(mtcars)
dt$carb <- as.character(dt$carb)
dt[which(carb %in% c("1", "2")),
carb := "type1"]
dt[which(carb %in% c("3", "4")),
carb := "type2"]
dt[which(carb %in% c("6", "8")),
carb := "type3"]
Run Code Online (Sandbox Code Playgroud)
是否可以在一个条件(dt[...] …