我试图将两个合并data.frames在一起,基于每个被调用的公共列名称series_id.这是我的合并声明:
merge(test_growth_series_LUT, test_growth_series, by = intersect(series_id, series_id))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
as.vector(y)出错:找不到对象'series_id'
帮助提供了这个描述,但我不明白为什么它找不到series_id.示例数据如下.
### S3 method for class 'data.frame':
#merge(x, y, by = intersect(names(x), names(y)),
# by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
# sort = TRUE, suffixes = c(".x",".y"), ...)
# Create a long data.frame to store data...
test_growth_series = data.frame ("read_day" = c(0, 3, 9, 0, 3, 9, 0, 2, 8),
"series_id" = c("p1s1", "p1s1", "p1s1", "p1s2", …Run Code Online (Sandbox Code Playgroud) 我有两个csv文件.
文件一有两列:
DD1 abct
DD2 geate
DD3 watec
DD4 wwwca21
DD5 bate789
Run Code Online (Sandbox Code Playgroud)
文件二有一列:
abct
geate
bate789
Run Code Online (Sandbox Code Playgroud)
我想得到一个截断的文件,包括那些与文件二匹配的文件,即
DD1 abct
DD2 geate
DD5 bate789
Run Code Online (Sandbox Code Playgroud)
你介意让我知道怎么用R做吗?
R.新手
我有很多 data.frames,例如:
df1 = data.frame(names=c('a','b','c','c','d'),data1=c(1,2,3,4,5))
df2 = data.frame(names=c('a','e','e','c','c','d'),data2=c(1,2,3,4,5,6))
df3 = data.frame(names=c('c','e'),data3=c(1,2))
Run Code Online (Sandbox Code Playgroud)
我需要合并这些 data.frames,而不删除名称重复项
> result
names data1 data2 data3
1 'a' 1 1 NA
2 'b' 2 NA NA
3 'c' 3 4 1
4 'c' 4 5 NA
5 'd' 5 6 NA
6 'e' NA 2 2
7 'e' NA 3 NA
Run Code Online (Sandbox Code Playgroud)
我找不到像合并选项这样的函数来处理名称重复。感谢您的帮助。定义我的问题。数据来自生物实验,其中一个样本具有不同数量的重复。我需要合并所有实验,并且需要生成这个表。我无法为重复生成唯一标识符。
我有2个文件,我想用R组合.
head(bed)
chr8 41513235 41513282 ANK1.Exon1
chr8 41518973 41519092 ANK1.Exon2
Run Code Online (Sandbox Code Playgroud)
第一个是给出间隔和它们的名字.(染色体,从,到,名称)
head(coverage)
chr1 41513235 20
chr1 41513236 19
chr1 41513237 19
Run Code Online (Sandbox Code Playgroud)
第二个是为单个基地提供保险.(染色体,位置,覆盖范围)
我现在想要在每个职位旁边写下每个外显子的名字.这将导致某些位置没有"外显子",我想在之后删除.
我想出了如何做我想做的事情.但是它需要3个循环和大约15个小时的计算时间.因为for循环不是R中的最佳实践,我想知道是否有人知道比以下更好的方法:
coverage <- cbind(coverage, "Exon")
coverage[,4] <- NA
for(i in 1:nrow(bed)){
for(n in bed[i,2]:bed[i,3]{
for(m in 1:nrow(coverage)){
if(coverage[m,2]==n){
file[m,4] <- bed[i,4]
}
}
}
}
na.omit(coverage)
Run Code Online (Sandbox Code Playgroud)
由于所有三个位置都在intervall"ANK1.Exon1"中,因此输出应如下所示:
head(coverage)
chr1 41513235 20 ANK1.Exon1
chr1 41513236 19 ANK1.Exon1
chr1 41513237 19 ANK1.Exon1
Run Code Online (Sandbox Code Playgroud) 问题:我有两个数据帧,我想根据一个数据帧在另一个数据帧的间隔中的日期/时间来合并。
流量:日期和时间 (Posixct)、频率
mydata:间隔、频率总和
我现在想计算流量的 Posixct 时间是否在 mydata 的间隔内,如果这是 TRUE,我想计算 mydata 中“频率总和”列中的频率。
我遇到的两个问题: 1. 流量数据框的行数明显多于 mydata。我不知道如何告诉 R 循环遍历流量中的每个观察结果以检查 mydata 中的一行。
这是数据:
DateTime <- c("2014-11-01 04:00:00", "2014-11-01 04:03:00", "2014-11-01 04:06:00", "2014-11-01 04:08:00", "2014-11-01 04:10:00", "2014-11-01 04:12:00", "2015-08-01 04:13:00", "2015-08-01 04:45:00", "2015-08-01 14:15:00", "2015-08-01 14:13:00")
DateTime <- as.POSIXct(DateTime)
Frequency <- c(1,2,3,5,12,1,2,2,1,1)
traffic <- data.frame(DateTime, Frequency)
library(lubridate)
DateTime1 <- c("2014-11-01 04:00:00", "2015-08-01 04:03:00", "2015-08-01 14:00:00")
DateTime2 <- c("2014-11-01 04:15:00", "2015-08-01 04:13:00", "2015-08-01 14:15:00")
DateTime1 <- as.POSIXct(DateTime1)
DateTime2 <- as.POSIXct(DateTime2) …Run Code Online (Sandbox Code Playgroud) 让我们创建示例数据:
df <- data.frame(date=c("2017-01-01","2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05"), X1=c("A", "B", "C", "D", "F"),
X2=c("B", "A", "D", "F", "C"))
df2 <- data.frame(date=c("2017-01-01","2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05"),
A=c("3", "4", "2", "1", "5"),
B=c("6", "2", "5", "1", "1"),
C=c("1", "4", "5", "2", "3"),
D=c("67", "67", "63", "61", "62"),
F=c("31", "33", "35", "31", "38"))
Run Code Online (Sandbox Code Playgroud)
所以我有两个数据框,我希望按日期和X1和X2匹配df2到df的值,并为这些创建新的变量.这对我来说很棘手的是df2中的匹配值是在colnames中.最终结果应如下所示:
> result
date X1 X2 Var1 Var2
1 2017-01-01 A B 3 6
2 2017-01-02 B A 2 4
3 2017-01-03 C D 5 63
4 2017-01-04 D F 61 31 …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一种聪明的或“更整洁”的方式来利用 tidyverse 中的查找表,但找不到令人满意的解决方案。
我有一个数据集和查找表:
# Sample data
data <- data.frame(patients = 1:5,
treatment = letters[1:5],
hospital = c("yyy", "yyy", "zzz", "www", "uuu"),
response = rnorm(5))
# Lookup table
lookup <- tibble(hospital = c("yyy", "uuu"), patients = c(1,5))
Run Code Online (Sandbox Code Playgroud)
...其中查找表中的每一行都是我想要过滤第一个小标题(数据)的确切模式。
想要的结果如下所示:
# A tibble: 3 x 4
patients treatment hospital response
<dbl> <chr> <chr> <dbl>
1 1.00 a yyy -0.275
2 5.00 e uuu -0.0967
Run Code Online (Sandbox Code Playgroud)
我想出的最简单的解决方案是这样的:
as.tibble(dat) %>%
filter(paste(hospital, patients) %in% paste(lookup$hospital, lookup$patients))
Run Code Online (Sandbox Code Playgroud)
然而,这一定是很多人经常做的事情 - 有没有一种更干净、更方便的方法来做到这一点(即,对于查找表中的两列以上)?
我编写的代码在高吞吐量的生产环境中运行,期望可以处理来自多个用户的各种输入。在这种环境中,我经常需要使用dplyr连接两个具有不匹配类型的连接列的多列数据帧,从而产生此错误。“由于类型不兼容,无法加入...”
预期生产代码将处理输入csvs,这些csvs是150+列乘0-1000行,具有12-20个连接列。我使用read.table来提高速度,并且由于150列的内容可以变化,因此可以根据数据内容推断类型。
如果有一个通用功能可以以编程方式匹配联接列类型,而无需假设列名称或位置,那将是很好的。
我有两组数据。
样本set_A(总行数:45467):
ID_a a1 a2 a3 time_a
2 35694 5245.2 301.6053 00.00944
3 85694 9278.9 301.6051 23.00972
4 65694 9375.2 301.6049 22.00972
5 85653 4375.5 301.6047 19.00972
6 12694 5236.3 301.6045 22.00972
7 85697 5345.2 301.6043 21.00972
8 85640 5274.1 301.6041 20.01000
9 30694 5279.0 301.6039 20.01000
Run Code Online (Sandbox Code Playgroud)
样本set_B(总行数:4798):
ID_b b1 b2 source time_b
2 34.20 15.114 set1.csv.1 20.35750
7 67.20 16.114 set1.csv.2 21.35778
12 12.20 33.114 set1.csv.3 22.35806
17 73.20 67.114 set2.csv.1 23.35833
23 88.20 42.114 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 sapply 和 switch 将描述性名称应用于数据。我已经多次使用这种方法,没有出现任何问题,但对于我最近的项目中的(只有一个!)专栏,它抛出了错误。我最好的猜测是,即使该值保存为字符串,该值也将是 R 中的保留字。我在下面创建了一个可重现的示例。
我的项目中的实际值与性别无关,并且可能有许多可能的选择。有人可以告诉我如何使用 sapply/switch 来避免代码中出现许多嵌套的 ifelse 语句吗?
# create test data
testdta <- as.data.frame(cbind(userid = c("1", "2", "3", "4"), gender = c("F", "M", "F", "M")))
# sapply/switch works with strings that are not reserved words
testdta$uiddescription <- sapply(testdta$userid, switch, "1" = "1 - first", "2" = "2 - second", "3+ - third or beyond")
testdta
# sapply/switch won't work when trying to interpret gender (possibly because F is reserved?)
testdta$gdescription <- sapply(testdta$gender, switch, "F" = …Run Code Online (Sandbox Code Playgroud)