合并两个表时,我无法控制合并结果中的列名.为了解释我的情况,让我使用mtcars数据:
#load mtcars data.frame
data(mtcars)
Run Code Online (Sandbox Code Playgroud)
添加一个名为'car'的新列,我将用作合并键
mtcars$car <- row.names(mtcars)
Run Code Online (Sandbox Code Playgroud)
现在创建两个互斥的表.
small <- mtcars[mtcars$cyl == 4,]
med.large <- mtcars[mtcars$cyl >4,]
Run Code Online (Sandbox Code Playgroud)
现在当我进行左合并时,我应该得到'小'表,因为这两个表是互斥的:
merge(x = small, y = med.large, by = 'car', all.x=T)
Run Code Online (Sandbox Code Playgroud)
这会返回"小"表,但是每列都会出现两次.x和.y扩展名.y列所有NA(因为这两个表没有共同的记录),看起来如下所示
car mpg.x cyl.x disp.x hp.x drat.x wt.x qsec.x vs.x am.x gear.x carb.x mpg.y cyl.y
1 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 NA NA
Run Code Online (Sandbox Code Playgroud)
如何使用主合并表中的列值只获取一次列名称,在本例中为LEFT表('small').我不知道如何避免使用.x和.y.延期?
df <- data.frame(
id = c('A1','A2','A4','A2','A1','A4','A3','A2','A1','A3'),
value = c(4,3,1,3,4,6,6,1,8,4))
Run Code Online (Sandbox Code Playgroud)
我希望在每个id组中获得最大值.我试过跟随,但得到一个错误,说替换有4行,数据有10我理解,但不知道如何纠正
df$max.by.id <- aggregate(value ~ id, df, max)
Run Code Online (Sandbox Code Playgroud)
这就是我最终成功地做到了这一点
max.by.id <- aggregate(value ~ id, df, max)
names(max.by.id) <- c("id", "max")
df2 <- merge(df,max.by.id, by.x = "id", by.y = "id")
df2
# id value max
#1 A1 4 8
#2 A1 4 8
#3 A1 8 8
#4 A2 3 3
#5 A2 3 3
#6 A2 1 3
#7 A3 6 6
#8 A3 4 6
#9 A4 1 6
#10 …Run Code Online (Sandbox Code Playgroud) 有没有办法评估一个字符串,看看它是否用英语评估一个单词?这是我正在寻找的
is.word("hello world")
[1] FALSE
is.word(c("hello", "world")
[1] TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
由于没有is.word逻辑功能,上述功能无效.
我使用聚合函数来按组计数.如果count> 0,则聚合函数仅返回组的计数.这就是我所拥有的
dt <- data.frame(
n = c(1,2,3,4,5,6),
id = c('A','A','A','B','B','B'),
group = c("x","x","y","x","x","x"))
Run Code Online (Sandbox Code Playgroud)
应用聚合函数
my.count <- aggregate(n ~ id+group, dt, length)
Run Code Online (Sandbox Code Playgroud)
现在看到结果
my.count[order(my.count$id),]
Run Code Online (Sandbox Code Playgroud)
我得到了关注
id group n
1 A x 2
3 A y 1
2 B x 3
Run Code Online (Sandbox Code Playgroud)
我需要以下内容(最后一行为零,我需要)
id group n
1 A x 2
3 A y 1
2 B x 3
4 B y 0
Run Code Online (Sandbox Code Playgroud)
谢谢你提前帮忙
我正在尝试将一个字符字段转换为一个日期字段,该日期字段的选项将使用strptimefunction或as.Datefunction。这是两个可重现的示例:
strptime(c("5/13/2015"),"%m/%d/%y")
#result is "2020-05-13 MST"
as.Date(c("5/13/2015"), format = "%m/%d/%y")
#result is "2020-05-13"
Run Code Online (Sandbox Code Playgroud)
为什么职能从2015年更改为2020年?如果相反,我格式化日期字符串并使用as.Date函数起作用。这是我所做的:
as.Date(c("2015/5/13"))
Run Code Online (Sandbox Code Playgroud)
而且效果很好。
有什么想法吗?