小编Vee*_*kar的帖子

结合函数和for循环

我有不同组织的数据,如此

 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 bioinformatics apply plyr

7
推荐指数
2
解决办法
611
查看次数

使用R在患者ID中包含其中一行的信息填充数据框中的NA

我在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中没有冲突,但可能会重复.(抱歉丑陋的格式 - 我是新手,可能不会发布图片).

谢谢!

r

7
推荐指数
1
解决办法
102
查看次数

使用R识别字符串中连续出现的特定字母段

我想确定下面数据框中的字符串列是否在字符串的前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)

r substr stringr

6
推荐指数
1
解决办法
195
查看次数

给定组中至少包含一个非NA值,请删除组中具有NA的行

样本数据

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方法感兴趣

r data.table

5
推荐指数
2
解决办法
701
查看次数

如何按组计算,然后每组只保留一个

说我有这个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代码更优雅?

merge aggregate r data.table

4
推荐指数
1
解决办法
139
查看次数

带两个参数的并行 foreach

我有这个代码:

  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

foreach r doparallel

3
推荐指数
1
解决办法
2334
查看次数

如何在 OSX 中使用 sed 将每个单词的第一个字母大写

我正在尝试使用以下 sed 命令将字符串中每个单词的第一个字母大写,但它不起作用:

 echo "my string" | sed 's/\b\(.\)/\u\1/g'
Run Code Online (Sandbox Code Playgroud)

输出:

 my string
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢

macos bash sed pipe capitalization

3
推荐指数
1
解决办法
4515
查看次数

如何将gsub用于R中的多个模式列表

这有点难以解释,所以请耐心等待.

我想用"查找"字符串列表和要替换的空字符串("")进行"查找/替换".我有一个大型数据表列我想做这个查找/替换.

使用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.知道为什么吗?

非常感谢你的帮助!

r

3
推荐指数
1
解决办法
1万
查看次数

按组折叠并使用R在data.frame中计算n

我有一个包含三个变量的数据框:治疗,剂量和结果(加或减).我对每种治疗和剂量都有多个观察结果.我正在尝试输出一个列联数据表,该数据表会使数据崩溃,以指示每个结果的数量与治疗和剂量以及观察次数的函数关系.例如:

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

r

2
推荐指数
1
解决办法
172
查看次数

使用R中的data.table识别并注释组明确的最小值

我需要确定样本数据中每个最小的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)

r data.table

2
推荐指数
2
解决办法
165
查看次数

在R中展平嵌套数据

更新:我一直在这里寻找相关的问题,似乎无法找到我正在寻找的东西.我需要展平一些嵌套数据.我的数据框目前看起来像这样:

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)

nested r

1
推荐指数
1
解决办法
313
查看次数