我有不同组织的数据,如此
tissueA tissueB tissueC
gene1 4.5 6.2 5.8
gene2 3.2 4.7 6.6
Run Code Online (Sandbox Code Playgroud)
我想计算一个汇总统计量
x = ? [1-log2(i,j)/log2(i,max)]/n-1
Run Code Online (Sandbox Code Playgroud)
其中n是组织的数量(这里是3),(i,max)是n个组织中基因i的最高值(即对于gene1,它是6.2).
因为我必须为每个基因的每个组织做这个计算(因为总和从j到n,并且j = 1),然后得到它的总和
我写了一个for循环
for (i in seq_along(x) {
my.max <- max(x[,i])
my.statistic <- (1-log2(x[,i]/log2[my.max])
my.sum <- sum(my.statistic)
my.answer <- my.sum/2 #(n-1=3-1=2)
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何为每一行应用这个for循环,通常我会编写一个函数并且只执行(apply,1,function(x))但是我不确定如何将for循环转换为函数.
例如,对于gene1的预期输出,它就是
(1-log2(4.5)/log2(6.2))/2 + (1-log2(5.8)/log2(6.2))/2 =0.1060983
Run Code Online (Sandbox Code Playgroud) 我在R中有以下数据框:
ID Information
1 Yes
1 NA
1 NA
1 Yes
2 No
2 NA
2 NA
3 NA
3 NA
3 Maybe
3 NA
Run Code Online (Sandbox Code Playgroud)
我需要用与该ID对应的一行中包含的任何信息填写包含NA的行.我想要这个:
ID Information
1 Yes
1 Yes
1 Yes
1 Yes
2 No
2 No
2 No
3 Maybe
3 Maybe
3 Maybe
3 Maybe
Run Code Online (Sandbox Code Playgroud)
据我所知,信息(即是/否/可能)在ID中没有冲突,但可能会重复.(抱歉丑陋的格式 - 我是新手,可能不会发布图片).
谢谢!
我想确定下面数据框中的字符串列是否在字符串的前20个字符内至少重复5次字母"V"或"G".
样本数据:
data = data.frame(class = c('a','b','C'), string =
c("ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ",
"AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD",
"GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER"))
Run Code Online (Sandbox Code Playgroud)
例如,第一行中的字符串在前20个字符位置内具有"VVVVG".类似地,第三行中的字符串具有"VVGGV".
data
# class string
#1 a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ
#2 b AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD
#3 C GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER
Run Code Online (Sandbox Code Playgroud)
所需的输出应如下所示:
# class string result
# 1 a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ TRUE
# 2 b AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD FALSE
# 3 C GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER TRUE
Run Code Online (Sandbox Code Playgroud) 样本数据
df = structure(list(class = structure(c(4L, 1L, 1L, 3L, 2L), .Label = c("apple",
"berry", "grape", "orange"), class = "factor"), value = c(NA,
NA, 1, 1, NA)), .Names = c("class", "value"), row.names = c(NA,
-5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
看起来像
class value
1 orange NA
2 apple NA
3 apple 1
4 grape 1
5 berry NA
Run Code Online (Sandbox Code Playgroud)
仅当组具有另一个非NA值时,如何删除组中具有NA的行
期望的输出
class value
1 orange NA
2 apple 1
3 grape 1
4 berry NA
Run Code Online (Sandbox Code Playgroud)
这可以通过使用子集和合并的三个步骤来完成。我对一种data.table方法感兴趣
说我有这个data.frame, data:
data <- data.frame(val=c(rep(6,10), rep(7, 15), rep(8, 20), rep(9, 25), rep(10, 100), rep(11, 20), rep(12, 15), rep(13, 10)))
data$plus <- data$val + 100
Run Code Online (Sandbox Code Playgroud)
我的目标是创建一个data.frame具有每个频率val和相关plus值的新.
我目前的策略是创建一个表(称为table),然后合并频率.然后只保留每组中的第一个观察:
table <- table(data$val)
df1 <- data.frame(val = as.integer(names(table)[1:length(table)]), N = table[1:length(table)])
df2 <- merge(data, df1)
df3 <- do.call(rbind, by(df2, list(df2$val), FUN=function(x) head(x, 1)))
Run Code Online (Sandbox Code Playgroud)
这有效,但看起来很笨重.
例如,在Stata中,代码将更简单.就像是:
bys val plus: egen max = _N
bys val plus: gen first = _n==1
keep if first==1
Run Code Online (Sandbox Code Playgroud)
有没有办法简化或使R代码更优雅?
我有这个代码:
library(doParallel)
registerDoParallel(cores = 8)
result = foreach(A = c(1, 2, 3),B = c(10, 20), .combine = list) %dopar% {
A*B
}
Run Code Online (Sandbox Code Playgroud)
结果
[[1]]
[1] 10
[[2]]
[1] 40
Run Code Online (Sandbox Code Playgroud)
但我想要:10、20、30、20、40、60
我正在尝试使用以下 sed 命令将字符串中每个单词的第一个字母大写,但它不起作用:
echo "my string" | sed 's/\b\(.\)/\u\1/g'
Run Code Online (Sandbox Code Playgroud)
输出:
my string
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢
这有点难以解释,所以请耐心等待.
我想用"查找"字符串列表和要替换的空字符串("")进行"查找/替换".我有一个大型数据表列我想做这个查找/替换.
使用base R,我无法弄清楚如何在gsub中使用模式列表.
我做了一个循环,但如果有人可以帮我弄清楚如何使用其中一个apply函数(或者只是基础R中的其他东西),那将会更有效率,我将非常感激.
这有效,但需要很长时间:
for(i in 1:GarbMax){
Table.All$Cleaned<-gsub(garbage[i], "", Table.All$Cleaned, ignore.case = TRUE, fixed = TRUE)
}
Run Code Online (Sandbox Code Playgroud)
我想要找到的值列表是"垃圾",我正在寻找它们的字段是"Table.All $ Cleaned"."GarbMax"只是"垃圾"列表的最大值.
抛开(可能),上面的代码给我一个警告,忽略ignore.case = TRUE.知道为什么吗?
非常感谢你的帮助!
我有一个包含三个变量的数据框:治疗,剂量和结果(加或减).我对每种治疗和剂量都有多个观察结果.我正在尝试输出一个列联数据表,该数据表会使数据崩溃,以指示每个结果的数量与治疗和剂量以及观察次数的函数关系.例如:
treatment dose outcome
control 0 0
control 0 0
control 0 0
control 0 1
treatmentA 1 0
treatmentA 1 1
treatmentA 1 1
treatmentA 2 1
treatmentA 2 1
treatmentA 2 1
Run Code Online (Sandbox Code Playgroud)
期望的输出是:
treatment dose outcome n
control 0 0 1 4
treatmentA 1 2 3
treatmentA 2 3 3
Run Code Online (Sandbox Code Playgroud)
我整天都玩这个,并且除了能够获得每个观察结果的每个结果的频率之外没有多少运气.任何建议将被赞赏(包括指出R手册和/或示例的哪些部分)我忽略了.
谢谢!
[R
我需要确定样本数据中每个最小的value (忽略NA),class并在新列中将其标记为'min',如下所示data.table
样本数据:
df = structure(list(class = c("apple", "apple", "apple", "banana",
"banana", "berry", "berry", "grape", "grape", "grape", "grape",
"grape", "melon", "melon", "melon"), value = c(108816872, 108851837,
108890411, 108784778, NA, 108784778, 108816872, 108816872, 108850460,
NA, NA, NA, NA, NA, NA)), .Names = c("class", "value"), class = "data.frame", row.names = c(NA,
-15L))
Run Code Online (Sandbox Code Playgroud)
期望的输出:
# class value anno
#1 apple 108816872 min
#2 apple 108851837 NA
#3 apple 108890411 NA
#4 banana 108784778 min
#5 banana NA NA …Run Code Online (Sandbox Code Playgroud) 更新:我一直在这里寻找相关的问题,似乎无法找到我正在寻找的东西.我需要展平一些嵌套数据.我的数据框目前看起来像这样:
Col_A | Col B
red | 1
red | 2
red | 4
red | 5
blue | 2
blue | 2
blue | 3
green | 1
green | 2
green | 3
green | 3
green | 7
green | 9
black | 4
orange| 1
orange| 2
Run Code Online (Sandbox Code Playgroud)
但是,我希望它看起来像这样:
A | B | C | D | E | F | G |
red | 1 | 2 | 4 | 5 | NA| NA|
blue | …Run Code Online (Sandbox Code Playgroud)