我有一个简单的表emp_id和job_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) 我有一个有两列的表
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) 我需要合并两个数据帧x和y,它们有大约 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中的所有行?
谢谢。
如果我有两个data.tables,dt1和dt2,我希望列之间的匹配数使用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.
我有一个数据帧命名df1其中有四列(即id,s,date和value)。值列为空,我想使用名为的第二个数据框填充它df2。df2被id列和其他许多列填充,这些列使用它们所属的日期命名。我需要的是找到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) 我有一个包含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) 我有两个数据集一和二
数据集一
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) 有列表,第一个 (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。
怎么了?
我有2个数据帧在R. Data1有2列id,date和Data2有3列id,date,level.I要设置level在塔Data1基础上level和date列Data2.
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) 我有两个data( .xlsx),DT1和DT2. 我想创建一个新列newcol的DT1基础上的原始列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、 columnyear和month在这个问题中并不重要。我们不需要考虑它。
三、我想要的结果是:
DT2
code year month newcol
AH1 2011 2 …Run Code Online (Sandbox Code Playgroud)