相关疑难解决方法(0)

如何根据data.frame中的变量引用列表?

我有一个简单的表emp_idjob_code.我想payout基于此返回正确的job_code

我用嵌套的ifelse管理了这个,但是如果我有更多job_code的话呢?

library(dplyr)
set.seed(1)

emp_id   <- round(rnorm(100, 500000, 10000))
job_code <- sample(c('a', 'b', 'c'), 100, replace = TRUE)
result   <- sample(c(1,2,3,4), 100, replace = TRUE)

df <- data.frame(emp_id = emp_id, job_code = job_code, result = result)

job_a <- c(0, 500, 1000, 5000)
job_b <- c(0, 200, 500, 750)
job_c <- c(0, 250, 750, 1000)

# Works but sucky
df %>% mutate(payout = ifelse(job_code == 'a', job_a[result],
  ifelse(job_code == 'b', job_b[result],
    job_c[result]))) …
Run Code Online (Sandbox Code Playgroud)

r

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

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

我有一个有两列的表

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万
查看次数

两个data.tables匹配列数

如果我有两个data.tables,dt1dt2,我希望列之间的匹配数使用if then then逻辑.如果dt1$V1==dt$V2那么dt$V1 == dt$V2呢?但这是if-then声明按比赛分组的关键dt1$V1 == dt$V2.我想使用data.table来提高效率,因为我实际上有一个大型数据集.

dt1 <- data.table(c("a","b","c","d","e"), c(1:5))
dt2 <- data.table(c("a","d","e","f","g"), c(3:7))
Run Code Online (Sandbox Code Playgroud)

在这个虚拟示例中,V1之间有3个匹配,但V2中只有两个匹配.所以答案(nrow或许,如果我是子集),将是2.

r data.table

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

通过匹配ID和列名称来检索data.frame的值

我有一个数据帧命名df1其中有四列(即idsdatevalue)。值列为空,我想使用名为的第二个数据框填充它df2df2id列和其他许多列填充,这些列使用它们所属的日期命名。我需要的是找到df1$valuein的对应值df2,其中日期和ID号都匹配。

示例数据:

set.seed(123)

#df1
df1 <- data.frame(id = 1:100, 
                      s = runif(100,100,1000), 
                      date = sample(seq(as.Date('1999/01/01'), as.Date('2001/01/01'), by="day"), 100), 
                      value = NA)

#df2
df2 <- data.frame(matrix(runif(80000,1,100), ncol=800, nrow=100))[-1]
    names(df2) <- seq(as.Date("1999-01-01"),as.Date("2002-12-31"),1)[c(1:799)]  
    df2 <- cbind(id =  1:100, df2)
Run Code Online (Sandbox Code Playgroud)

r date dataframe

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

如何更改数据表中的几个列名称

我有一个包含10列的数据表.

town    
tc  
one  
two  
three   
four    
five    
six  
seven   
total
Run Code Online (Sandbox Code Playgroud)

需要为我使用的"一"到"总"列生成平均值,

DTmean <- DT[,(lapply(.SD,mean)),by = .(town,tc),.SDcols=3:10]
Run Code Online (Sandbox Code Playgroud)

这会生成均值,但我希望列名称后缀为"_mean".我们应该怎么做?希望前两列保持与"town"和"tc"相同.我尝试了以下但是然后它将所有"one"重命名为"total"到"_mean"

for (i in 3:10) {
  setnames(DTmean,i,paste0(names(i),"_mean"))
}
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如何做r中的左连接

我有两个数据集一和二

数据集一

a     b  c
111   a  1
112   b  2 
113   c  3
114   d  4
115   e  5
Run Code Online (Sandbox Code Playgroud)

数据集二

e    d   g
222  ss  11
111  ff  22
113  ww  33 
114  qq  44
234  dd  55
534  vv  66
Run Code Online (Sandbox Code Playgroud)

我想做一个左连接

下面是用SQL编写的代码,但是当我在SQLDF中尝试它时,它显示为错误

proc sql;
create table join1 as
select one.*, two.*
from  one left join two
on one.a = two.e;
quit;
Run Code Online (Sandbox Code Playgroud)

r

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

r 中的 MATCH 函数

有列表,第一个 (list1) 有 id,name,age 和其他 (list2,list3,..) 有 ids 和测试值(唯一)。

清单 1:

id  age name    bio-test    
1   40  danny
2   16  nora            
3   35  james
4   21  ben
Run Code Online (Sandbox Code Playgroud)

清单 2(生物测试):

id  test passed year   
1   100   yes   1
5   80    yes   n/a      
4   55    no    2
Run Code Online (Sandbox Code Playgroud)

我正在尝试将每个 id 的测试值添加到 list1(并非每个 id 都有一个测试值)。

这是代码的一部分:

for (i in 1:length(list1)) { 
list1$test1value <- list2$test[match(list1$id[i], list2$id[i]),
nomatch = NA_integer_, incomparables = NULL)] }
Run Code Online (Sandbox Code Playgroud)

但是通过 id 查找测试值,它只复制了 list2 中的第一个测试值并将其复制到 200 个单元格,其他 3000 个是 N/A。

怎么了?

r match vlookup

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

通过基于日期在另一个数据帧中查看其值来在一个数据框中设置值

我有2个数据帧在R. Data1有2列id,dateData2有3列id,date,level.I要设置level在塔Data1基础上leveldateData2.

Data1 = data.frame(id = c(1,1,1), dates = c("2014-06","2016-02","2016-05"))

id  date
1  2014-06 
1  2016-02 
1  2016-05 

Data2 = data.frame(id = c(1,1,1), dates = c("2015-07","2016-04","2016-07"), level=c(3,4,5))

id    date     level
1     2015-07   3
1     2016-04   4
1     2016-07   5
Run Code Online (Sandbox Code Playgroud)

因此产生的数据框应该是:

id  date    level
1  2014-06   NULL
1  2016-02    3
1  2016-05    4
Run Code Online (Sandbox Code Playgroud)

r

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

基于另一个 data.table 的 data.table 映射

我有两个data( .xlsx),DT1DT2. 我想创建一个新列newcolDT1基础上的原始列DT1,映射在列DT2
我知道这是模棱两可的,所以我在这里解释更多:
首先,这是我的两个数据。

DT1
code    type  
AH1     AM
AS5     AM
NMR     AM
TOS     AM
IP      AD
CC      ADCE
CA      Wa

DT2
code    year   month  
AH1     2011   2
AH1     2011   5
AS5     2012   7
AS5     2012   6
AS5     2013   3
CC      2014   6
CA      2016   11
Run Code Online (Sandbox Code Playgroud)

其次, in DT2、 columnyearmonth在这个问题中并不重要。我们不需要考虑它。
三、我想要的结果是:

DT2
code    year   month   newcol
AH1     2011   2 …
Run Code Online (Sandbox Code Playgroud)

r dataframe data.table

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

标签 统计

r ×10

data.table ×3

dataframe ×3

date ×1

dplyr ×1

match ×1

merge ×1

plyr ×1

sql ×1

sqldf ×1

vlookup ×1