我有一个包含三个变量(ACC和类型和ID)的数据框,其中ACC指的是决策的准确性,类型是指30种不同的决策类型,对于参与者的每种决策类型重复15次,ID指的是对参与者.它看起来像这样:
ID ACC Type
1 1 1
1 0 3
1 1 10
etc...
2 1 5
2 0 13
2 0 11
etc...
Run Code Online (Sandbox Code Playgroud)
我的目标是分析参与者中每种决策类型的准确性,并将数据合并到数据框中.如:
ID ACC_Type1 ACC_Type2 […] ACC_Type30
1 70 65 87
2 65 50 90
etc...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能够通过单独分组决策类型来计算,但是,我正在寻找一种更智能的方法来避免单独键入决策类型值:
library(data.table)
library(plyr)
dt <- data.table(d,key="Type")
dt_Type1<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==1),mean))
dt_Type2<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==2),mean))
[]
dt_Type30<-data.frame (aggregate(ACC~ID,data=subset(dt,Type==30),mean))
total <- merge(dt_Type1,dt_Type2 […] Type30,by="ID")
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我一直在努力寻找答案.我保证我会尝试从解决方案中学习.为了学习,我想了解如何使用显式循环,但如果你想分享矢量化方法作为奖励,也非常感谢.
假设我每天都要玩一次游戏,我知道每天获胜的可能性.我想要一个函数,它接受概率向量并至少在一天内返回累积成功概率.因此,如果我连续玩了3天并且胜利的概率是每天0.5,那么我的函数应该返回"0.875,0.75,0.5"
这是我最近尝试编写此函数的失败:
prob_cum <- function(prob_today) {
p_cum <- rep(0, length(prob_today))
for (i in 1:length(prob_today)) {
for (j in i:length(prob_today)) {
p_cum[j] <- p_cum[j-1] - ((1 - p_cum[j-1]) * prob_today[j])
}
}
p_cum
}
prob_daily <- c(.5,.5,.5)
prob_cum(prob_daily)
Run Code Online (Sandbox Code Playgroud) 假设我有一个向量,说:
x <- c(1, 0, 1, 0, 0, 0, 1, 1, 0, 0,1,1,1,1,0,1,1,0,1,0,0,0,0,0,1,0,1,0,1,0)
Run Code Online (Sandbox Code Playgroud)
我想获得一个向两个零之间的值求和的向量,即输出应如下所示:
y = c(1,2,4,1,1,1)
Run Code Online (Sandbox Code Playgroud)
请注意,所有的应该在开头为零,在结尾为零,否则将不计算.所以字符串01010只产生1.
我试图使用索引为零的运行长度.
提前致谢
我使用fread()的data.table高效读取大型矩形CSV文件导入R这些都是double(也是唯一double)值-不缺少的元素.
但是,如果我在科学记数法中的数字非常小,它将被转换为破坏整个阅读的字符.这是错误消息(例如,每个小数字都有多个):
16:在fread("SomeCSVFile"):
Bumped列560在数据行16799上键入字符,字段包含'-2.1412168512924677E-308'.将此列中先前读取的值从整数或数字强制转换回可能不是无损的字符; 例如,如果'00'和'000'发生之前它们现在只是'0',并且可能与',,'和',NA'的处理不一致(如果它们发生在碰撞之前的这一列中) ).如果这很重要,请重新运行并为此列设置'colClasses'为'character'.请注意,列类型检测使用前5行,中间5行和后5行,所以希望此消息非常罕见.如果向datatable-help报告,请重新运行并包含verbose = TRUE的输出.
我希望函数将它们设置为零或以最小可能值截断它们(两者都很好).
这是一个可重现的数据集https://drive.google.com/file/d/0B3cafW7J7xSfNmhJQzh3SF9VYms/edit?usp=sharing
我想删除与事故索引第一列具有相同值的所有行。意味着在数据框中,如果有 2-3 行第一列值相同,则仅应保留第一行,而删除其他行。
我尝试了以下方法,但没有成功。
v2<-v1[which(v1$i..Accident_Index==unique(v1$i..Accident_Index))]
Run Code Online (Sandbox Code Playgroud)
请帮忙..谢谢
当然,我在这里遗漏了一些东西.我正在阅读这份文件:
现在,如果我有任何旧矢量:
x <- letters
Run Code Online (Sandbox Code Playgroud)
我可以做这个:
x[5] <- "test"
Run Code Online (Sandbox Code Playgroud)
......并且向量x中的字母"e"将被字符串"test"替换.到目前为止一切顺利,但如果我制作数据框:
df <- data.frame(col1 = letters, col2 = letters)
Run Code Online (Sandbox Code Playgroud)
那为什么我会收到以下错误:
df[5,1] <- "test"
Run Code Online (Sandbox Code Playgroud)
和
df$col1[5] <- "test"
Run Code Online (Sandbox Code Playgroud)
?
必须有一种非常简单的方法,才能进入数据框并只更改一个值.
错误是"无效因子级别".因此,我认为理想情况是以某种方式告诉R我希望它不要将DF中的相关列视为因子变量.
我想转置下表
+---------+----------+------+-------+
| var | Year | A | B |
+---------+----------+ -----+-------+
| Mean | 2006 | 1.3 | 4.6 |
| Median | 2006 | 1.4 | 4.1 |
| Mean | 2007 | 3.6 | 5.5 |
| Median | 2007 | 4.0 | 5.5 |
| Mean | 2008 | 5.5 | 4.0 | `
| Median | 2008 | 5.5 | 5.1 |
+---------+----------+------+-------+
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
+---------+----------+------+--------+
| var | Year | Mean | Median | …Run Code Online (Sandbox Code Playgroud) 我在 R 中有以下数据框。它代表了一个组成的蛋白质结构,以便于解释。
Uniprots Chain resSeq Serial
P68871 D 23 3446
P68871 D 24 3453
P68871 D 25 3457
P68871 D 26 3461
P68871 D 27 3470
P69011 A 38 3561
P69011 A 39 3568
P69011 A 40 3577
P69011 A 41 3588
P69011 A 42 3599
P69011 A 43 3610
P69011 A 44 3619
P69011 A 45 3625
P69011 A 46 3636
P0116 B 2 4239
P0116 B 4 4242
P0116 B 5 4268
P0116 B 6 4279
P0116 …Run Code Online (Sandbox Code Playgroud) 我有一个大小均匀的字符向量列表,我希望将它们有效地组合到一个数据帧中,列表中的向量成为新数据帧的行。以下ls是我的列表,df也是我的预分配数据框。
ls <- list(c("r1c1", "r1c2", "r1c3"),
c("r2c1", "r2c2", "r2c3"))
df <- data.frame(col1 = character(), col2 = character(), col3 = character(),
stringsAsFactors = F)
# Desired Result:
col1 col2 col3
1 r1c1 r1c2 r1c3
2 r2c1 r2c2 r2c3
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过rbind(df, ls)按列创建新的数据框,df如下所示:
c..r1c1....r1c2....r1c3.. c..r2c1....r2c2....r2c3..
4 r1c1 r2c1
5 r1c2 r2c2
6 r1c3 r2c3
Run Code Online (Sandbox Code Playgroud)
我也尝试过rbind在for循环中执行以下操作:
for (i in 1:length(ls))
df <- rbind(df, ls[[i]])
Run Code Online (Sandbox Code Playgroud)
但是,这给了我警告信息:invalid factor level, NA generated,即使我最初设置stringsAsFactors为false。当不断在较大的列表上执行时,Rbind似乎也是一个缓慢的过程,因此,我想尽可能地减少其使用。
任何帮助将不胜感激。
这很奇怪.当我尝试选择我的列data.table做
df1[, 30]
Run Code Online (Sandbox Code Playgroud)
它只给了我30,或者我放在那里的任何数字.不是第30栏.
数据:https://github.com/pourque/country-data/blob/master/data/df1.csv
我已经检查了,当我刚刚进行测试时,一切正常data.frame:
df2 <- data.frame(x = 1:3, y = 3:1, z = 7:9)
> df2[, 2]
[1] 3 2 1
Run Code Online (Sandbox Code Playgroud)
关于可能发生的事情的任何想法?