相关疑难解决方法(0)

匹配不同数据帧上的多个列并获取其他列作为结果

我有两个大数据框,一个(df1)有这个结构

   chr    init
1  12  25289552
2   3 180418785
3   3 180434779
Run Code Online (Sandbox Code Playgroud)

另一个(df2)有这个

    V1    V2     V3
10  1     69094 medium
11  1     69094 medium
12  12 25289552 high
13  1     69095 medium
14  3 180418785 medium
15  3 180434779 low
Run Code Online (Sandbox Code Playgroud)

我试图做的是添加列V3df2df1,来获得突变的信息

   chr    init  Mut
1  12  25289552 high
2   3 180418785 medium
3   3 180434779 low
Run Code Online (Sandbox Code Playgroud)

我正在尝试将两者加载到R中,然后使用匹配进行for循环,但它不起作用.你知道有什么特别的方法吗?我也愿意使用awk或类似的东西

r matching multiple-columns dataframe

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

在多列上交叉数据框

我有2个数据帧:

dat:1900个隐含的9个变量

              V1        V2        V3        V4 V5      V6       V7     V8             V9
1        V_P50P50_Q3 chr12 106642383 106642395  + 18.1425 4.03e-08 0.0515  GGGGGACTCCCCC
2 V_P50RELAP65_Q5_01  chr8 142276666 142276677  - 16.6429 2.51e-07 0.2780   GGGATTTCCCAC
3          V_RELA_Q6 chr22  51020067  51020078  - 15.9395 2.71e-07 0.3350   GGGAATTTCCCC
4       V_NFKB_Q6_01 chr14  98601454  98601469  + 17.0684 3.08e-07 0.236  GGAGTGGAAATTCC
5          V_CREL_Q6 chr22  51020068  51020079  - 16.1165 3.19e-07 0.4050   AGGGAATTTCCC
Run Code Online (Sandbox Code Playgroud)

dat.markov:986个变量的1486个障碍物

            V1    V2        V3        V4 V5      V6       V7    V8               V9
1 V_NFKB_Q6_01 chr14  98601454  98601469  + 17.2212 1.33e-07 0.146 …
Run Code Online (Sandbox Code Playgroud)

intersection r

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

R中的Complexe非equi合并

我正在尝试在两个表之间进行复杂的非equi连接.我在最后一次使用R2016的演示中受到启发(https://channel9.msdn.com/events/useR-international-R-User-conference/useR2016/Efficient-in-memory-non-equi-joins-using-datatable这使我相信它将是data.table的合适任务.我的表1看起来像:

library(data.table)
sp <- c("SAB","SAB","SAB","SAB","EPN","EPN","BOP","BOP","BOP","BOP","BOP","PET","PET","PET")
dbh <- c(10,12,16,22,12,16,10,12,14,20,26,12,16,18)
dt1 <- data.table(sp,dbh)
dt1
     sp dbh
 1: SAB  10
 2: SAB  12
 3: SAB  16
 4: SAB  22
 5: EPN  12
 6: EPN  16
 7: BOP  10
 8: BOP  12
 9: BOP  14
10: BOP  20
11: BOP  26
12: PET  12
13: PET  16
14: PET  18
Run Code Online (Sandbox Code Playgroud)

这是dbh的树木列表.我的第二个表(下面)给出了一个通用表,它为每个树种提供了一系列dbh来对大小类或树进行分类:

gr_sp <- c("RES","RES","RES","RES","RES","RES", "DEC", "DEC", "DEC", "DEC", "DEC", "DEC")
sp <- c("SAB","SAB", "SAB", "EPN", "EPN", "EPN", "BOP", "BOP", "BOP", "PET", "PET", …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

将两列与另外两列匹配

我有几行数据(标签分隔).我想找到与每行中两列(第3和第4)中的元素匹配的行,其中包含另外两列(第10和第11).例如,在行1中,列3和4中的95428891和95443771 匹配行19中的列10和11中的元素.同样,倒数也是如此.中的元素的列3和4第19行也匹配元件列10和11第1行.我需要能够遍历每一行并输出相应匹配的行索引.有时可能只有一列匹配而不是两者(因为有时会有重复的数字),但我只需要选择两列匹配的行以及相互匹配的行.因此,输出具有倒数匹配的行索引是个好主意,例如,1和19作为制表符分隔值(可能在不同的data.frame对象中).并且没有相互匹配的行可以单独输出.我试图在R中实现它来运行几行数据.

1313    chr2    95428891    95443771    14880   chr2:96036782   205673  +   chr2    96036782    96052481
1313    chr2    95428896    95443771    14875   chr2:97111880   205214  -   chr2    97111880    97127588
1313    chr2    95443771    95526464    82693   chr2:95609272   1748861 -   chr2    95609272    95691902
1313    chr2    95477143    95486318    9175    chr2:97616847   177391  +   chr2    97616847    97626039
1313    chr2    95486323    95521267    34944   chr2:97035158   268351  + …
Run Code Online (Sandbox Code Playgroud)

r

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

使用同一组中满足条件的下一个第一行设置列值

我是R的新手,这是我关于stackoverflow的第一个问题。

我在尝试

  • 通过引用分配给新列
  • 每行
  • 使用同一组行中的下一个第一行的值
  • 符合条件的

示例数据:

    id code  date_down    date_up
 1:  1    p 2019-01-01 2019-01-02
 2:  1    f 2019-01-02 2019-01-03
 3:  2    f 2019-01-02 2019-01-02
 4:  2    p 2019-01-03       <NA>
 5:  3    p 2019-01-04       <NA>
 6:  4 <NA> 2019-01-05 2019-01-05
 7:  5    f 2019-01-07 2019-01-08
 8:  5    p 2019-01-07 2019-01-08
 9:  5    p 2019-01-09 2019-01-09
10:  6    f 2019-01-10 2019-01-10
11:  6    p 2019-01-10 2019-01-10
12:  6    p 2019-01-10 2019-01-11
Run Code Online (Sandbox Code Playgroud)

我想做的是

  • 子集(组) id
  • 每行
  • 找到date_up第一行,
  • 其中,code …

r data.table

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

如何通过将相同的值写入同一行,将两个不同长度的向量写入一个数据帧?

我想将两个长度不同且值部分相等的向量写入一个数据帧。相同的值应写入同一行。

ef1 <- c('A1', 'A2', 'B0', 'B1', 'C1', 'C2')
ef2 <- c('A1', 'A2', 'C1', 'C2', 'D1', 'D2')
Run Code Online (Sandbox Code Playgroud)

如果我将它们写在一个数据框中,它看起来像这样:

df <- data.frame (ef1, ef2)
> df
  ef1 ef2
1  A1  A1
2  A2  A2
3  B0  C1
4  B1  C2
5  C1  D1
6  C2  D2
Run Code Online (Sandbox Code Playgroud)

但我想要的是这个:

> df
  ef1 ef2
1  A1  A1
2  A2  A2
3  B0  NA
4  B1  NA
5  C1  C1
6  C2  C2
7  NA  D1
8  NA  D2
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助。

merge r vector dataframe

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

如何使用data.table执行"setdiff"合并?

说我有两张桌子:

library(data.table)
set.seed(1)

tab1 <- data.table(
  let = rep(letters[1:2], each = 3),
  num = rep(1:3, 2),
  val = rnorm(6),
  key = c("let", "num")
)

tab2 <- data.table(
  let = rep(letters[1:2], each = 2),
  num = rep(1:2, 2),
  val = rnorm(4),
  key = c("let", "num")
)
Run Code Online (Sandbox Code Playgroud)

表格1:

> tab1
   let num        val
1:   a   1 -0.6264538
2:   a   2  0.1836433
3:   a   3 -0.8356286
4:   b   1  1.5952808
5:   b   2  0.3295078
6:   b   3 -0.8204684
Run Code Online (Sandbox Code Playgroud)

表2:

> tab2
   let num …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

根据两个相似df之间的对比创建一个新的数据帧

我有一个像这样的数据框:

  X Y  Z T
  1 2  4 2
  3 2  1 4
  7 5 NA 3
Run Code Online (Sandbox Code Playgroud)

经过几个步骤(不重要哪一个)我得到了这个df:

  X Y Z T
  1 2 4 2
  3 2 NA 4
  7 5 NA 3
Run Code Online (Sandbox Code Playgroud)

我想获得一个新的数据帧,只有在步骤中没有改变的行; 结果将是这一个:

 X  Y  Z  T
 1  2  4  2
 7  5  NA 3
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

r compare-contrast dataframe

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

快速 R 查找表

之前也问过类似的问题,但没有明确的通用答案。(Joseph Adler 的实验不再在网上,他的书只说“编写一个 S4 类”。)

假设有一个包含多个索引的大型查找表。假设要查找的值大小适中。即使是 R 合并也很慢。下面是一个例子:

{
    L <- 100000000  ## only 100M entries for 1GB*4 of int data
    lookuptable  <- data.frame( i1=sample(1:L), i2=sample(1:L), v1=rnorm(L), v2=rnorm(L) )
    NLUP <- 10      ## look up only 10+1 values in large table
    vali <- sample(1:L, NLUP)
    lookmeup <- data.frame( i1= c(lookuptable[vali,1], -1),
                       i2= c(lookuptable[vali,2],-1), vA=rnorm(11) )
    rm(vali); rm(L)
}

## I want to speed this up---how?
system.time( merge( lookmeup, lookuptable,  by.x=c("i1","i3"), by.y=c("i1","i2"),
                   all.x=T, all.y=F, sort=F ) )
Run Code Online (Sandbox Code Playgroud)

(试试吧!在我的 2019 iMac 上 …

r

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

如何使用字符值连接/合并两个表?

我想基于名字,姓氏和年份组合两个表,并创建一个新的二进制变量,指示表1中的行是否存在于第二个表中.

第一张桌子是一个赛季NBA球员某些属性的面板数据集:

   firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic","Larry","Larry")
   lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson","Bird","Bird")
   year<-c("1991","1992","1993","1991","1992","1993","1992","1992")

   season<-data.frame(firstname,lastname,year)


    firstname   lastname        year
  1 Michael      Jordan         1991
  2 Michael      Jordan         1992
  3 Michael      Jordan         1993
  4 Magic        Johnson        1991
  5 Magic        Johnson        1992
  6 Magic        Johnson        1993
  7 Larry        Bird           1992
  8 Larry        Bird           1992
Run Code Online (Sandbox Code Playgroud)

第二个data.frame是选择参加全明星赛的NBA球员的一些属性的面板数据集:

   firstname<-c("Michael","Michael","Michael","Magic","Magic","Magic")
   lastname<-c("Jordan","Jordan","Jordan","Johnson","Johnson","Johnson")
   year<-c("1991","1992","1993","1991","1992","1993")

    ALLSTARS<-data.frame(firstname,lastname,year)



     firstname  lastname    year
  1 Michael     Jordan    1991
  2 Michael     Jordan    1992
  3 Michael     Jordan    1993
  4 Magic       Johnson   1991
  5 Magic       Johnson   1992
  6 Magic       Johnson   1993
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下:

  firstname lastname    year    allstars

   1    Michael …
Run Code Online (Sandbox Code Playgroud)

r

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