相关疑难解决方法(0)

映射数据帧之间的值R.

让我们创建示例数据:

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)

r dataframe

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

基于公共行合并两个大型表

我有两个包含遗传SNP数据的大型数据表(或将有它们,我仍然需要将它们变成相同的格式).

这些是非常庞大的表格,因此我必须在集群上执行任何操作.

两个表都有> 600,000行,其中包含不同但重叠的SNP的数据.每列是一个人(一个表有942个样本,一个有92个).一旦正确格式化了另一个表,两个表都将如下所示

dbSNP_RSID  Sample1 Sample2 Sample3 Sample4 Sample5
rs10000011  CC  CC  CC  CC  TC
rs1000002   TC  TT  CC  TT  TT
rs10000023  TG  TG  TT  TG  TG
rs1000003   AA  AG  AG  AA  AA
rs10000041  TT  TG  TT  TT  TG
rs10000046  GG  GG  AG  GG  GG
rs10000057  AA  AG  GG  AA  AA
rs10000073  TC  TT  TT  TT  TT
rs10000092  TC  TC  CC  TC  TT
rs1000014   GG  GG  GG  GG  GG
rs10000154  GG  AG  AG  AA  AG
rs10000159  GG  AG  GG …
Run Code Online (Sandbox Code Playgroud)

r

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

R:如何匹配/连接不同维度的2个矩阵(nrow/ncol)?

我想匹配/加入两个矩阵,一个小值的值应该通过rownames/colnames匹配更大的矩阵.我只找到了这个答案.但是,我无法匹配位置,因为代码行在frn <- as.matrix(bigMatrix[[1]])我的情况下不起作用.内,外...加入的答案,在这里并没有帮助,因为我想匹配/加入了很多不同的列(而不是如用于X CostumerID和y的一个客户ID).

因为我使用的矩阵是126x104和193x193矩阵.我准备了示例数据:1.较大的矩阵,其中应包括较小的矩阵(字母在原始数据集国家名称中):

a = c("A", "B", "C", "D", "E", "F")
full_matrix = matrix(nrow = length(a), ncol=length(a))
dimnames(full_matrix) <- list(levels(as.factor(a)), levels(as.factor(a)))

full_matrix
   A  B  C  D  E  F
A NA NA NA NA NA NA
B NA NA NA NA NA NA
C NA NA NA NA NA NA
D NA NA NA NA NA NA
E NA NA NA NA NA NA
F NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)

而较小的矩阵:

matrix …
Run Code Online (Sandbox Code Playgroud)

r

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

将数据框的新列分配给与其他数据框匹配的值

我有两个数据框:

geodata<-read.csv(text='postalcode;latitude;longitude
7000;47.8415;16.5041
7000;47.8921;16.4011
7000;47.9400;16.5032
7071;47.8012;16.671
2443;47.9156;16.5179', sep=';', header=TRUE)

addresses<-read.csv(text='postalcode;address
2400;Lorem ipsum
7000;Dolor sit amet
2443;Consetetur sadipscing elitr
7000;Sed diam nonumy', sep=';', header=TRUE)
Run Code Online (Sandbox Code Playgroud)

我需要的是地址数据框中的两个附加列与相应的(当存在多个邮政编码行时的第一个匹配)geodata $ latitudegeodata $ longitude值.

如何加入(合并)数据框(内部,外部,左侧,右侧)?显示我正在寻找的几乎所有,除了我不想在合并的数据帧中重复行.

我试过类似的东西

# code not working... #
addresses$latitude<-geodata[addresses$postalcode==geodata$postalcode]
Run Code Online (Sandbox Code Playgroud)

我知道这真的很丑:-(

r

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

按 2 个成对向量子集/过滤 data.table

如何获取一个 data.table 对象,并通过另一个表中的两个成对向量在两列上有条件地对其进行子集化。例如,我有一张航班表:

library(data.table)
library(nycflights13)
flights <- data.table(flights)
Run Code Online (Sandbox Code Playgroud)

我还有另一个 data.table 包含我的配对列:

subDT <- data.table(sub_orig = c("EWR", "LGA"), sub_dest = c("IAH", "ATL"))
subDT
Run Code Online (Sandbox Code Playgroud)

我希望flights在原点"EWR"和目的地"IAH"完全相同的那些行中查找和子集(即像 using &),并且还在同一个查询中返回原点"LGA"和目的地的行"ATL"

flights[dest %in% subDT[, sub_dest] & origin %in% subDT[, sub_orig]]
Run Code Online (Sandbox Code Playgroud)

以上包含我想要的数据,即上面指定的那些配对,但它也包含我不想要的"EWR" & "ATL"和配对"LGA" & "IAH"

我意识到我可以制作一个假的帮助列(例如paste(dest, origin))并通过%in%它选择通过,但我觉得有更好的方法,setkey目前可能有一些魔法逃脱了我?

注意,我的最终用例实际上将使用字符向量的组合作为一列,并将数字因子作为另一列,如果这很重要的话。

r data.table

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

合并多列R

如果这不是重复的,我很惊讶,但我在其他任何地方都找不到答案。

我有两个数据框data1data2,它们在一列中不同,但其余的列是相同的。我想将它们合并到一个唯一的标识列id. 但是,如果来自的 ID 在data2中没有匹配data1项,我希望将条目data2附加在底部,类似于plyr::rbind.fill()而不是将 data2 中的所有相应列重命名为column1.xand column1.y。我意识到这不是最清楚的解释,也许我不应该在星期六工作。这是创建两个数据帧和所需输出的代码:

spp1 <- c('A','B','C')
spp2 <- c('B','C','D')
trait.1 <- rep(1.1,length(spp1))
trait.2 <- rep(2.0,length(spp2))
id_1 <- c(1,2,3)
id_2 <- c(2,9,7)

data1 <- data.frame(spp1,trait.1,id_1)
data2 <- data.frame(spp2,trait.2,id_2)
colnames(data1) <- c('spp','trait.1','id')
colnames(data2) <- c('spp','trait.2','id')
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  spp trait.1 trait.2 id
1   A     1.1      NA  1
2   B     1.1       2  2
3   C     1.1      NA  3
4   C      NA       2  9 …
Run Code Online (Sandbox Code Playgroud)

merge r

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

计算客户之间共享的订单数量

我有一个有两列的表

Order | CustomerID

 1. A | C1 
 2. B | C1 
 3. C | C1 
 4. D | C2 
 5. B | C3 
 6. C | C3
 7. D | C4
Run Code Online (Sandbox Code Playgroud)

它是一张很长的桌子.我想要一个显示的输出

C1 | C3 | 2  #Customer C1 and Customer C3 share 2 orders (i.e. orders, B & C) 
C1 | C2 | 0   #Customer C1 and Customer C2 share 0 orders 
C2 | C4 | 1   #Customer C2 and Customer C4 share 1 orders (i.e. order, D) …
Run Code Online (Sandbox Code Playgroud)

sql r plyr sqldf dplyr

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

基于公共列合并数据帧,但保留 x 中的所有行

我需要合并两个数据帧xy,它们有大约 50 列公共列和一些唯一列,并且我需要保留x中的所有行。

如果我运行它会起作用:

 NewDataframe <- merge(x, y, by=c("ColumnA", "ColumnB", "ColumnC"),all.x=TRUE)
Run Code Online (Sandbox Code Playgroud)

问题是有超过 50 个公共列,我宁愿避免键入所有公共列的名称。

我尝试过:

 NewDataframe <- merge(x, y, all.x=TRUE)
Run Code Online (Sandbox Code Playgroud)

但出现以下错误:

 Error in merge.data.table(x, y, all.x = TRUE) :
 Elements listed in `by` must be valid column names in x and y
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以使用公共列而不输入所有列,但保留xby中的所有行?

谢谢。

merge r dataframe

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

rbind两个表并用具有相同变量的值填充NA的行

我将根据样本数据向您解释我的问题.这是第一个表(df1):

  x x1 y  z
1 1 10 a 11
2 3 11 b 13
3 5 10 c 15
4 7 11 d 17
5 9 10 e 19
Run Code Online (Sandbox Code Playgroud)

这是一个dput()版本:

structure(list(x = c(1, 3, 5, 7, 9), x1 = c(10, 11, 10, 11, 10
), y = structure(1:5, .Label = c("a", "b", "c", "d", "e"), class = "factor"), 
    z = c(11, 13, 15, 17, 19)), .Names = c("x", "x1", "y", "z"
), row.names = c(NA, …
Run Code Online (Sandbox Code Playgroud)

r

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

如何使用 dplyr 连接 2 个表并保留 RHS 表中的所有列?

这里有2个数据框:

df1 <- data.frame(ID=c(1,2,3,4))
df1
df2 <- data.frame(ID=c(1,3))
df2
Run Code Online (Sandbox Code Playgroud)

我怎样才能加入他们以获得以下输出?:

#  ID.1 ID.2
#     1    1
#     2 
#     3    3
#     4 
Run Code Online (Sandbox Code Playgroud)

谢谢!

r left-join dplyr

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

标签 统计

r ×10

dataframe ×2

dplyr ×2

merge ×2

data.table ×1

left-join ×1

plyr ×1

sql ×1

sqldf ×1