全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
15804 16
2014-10-06

写sql写习惯了,学R的时候也想用到类似sql里面的merge功能,看了r帮助文档后进行了一些总结
以r文档里面的例子来介绍,假如有这样两个数据框authors和books
authors <- data.frame(
    surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
    nationality = c("US", "Australia", "US", "UK", "Australia"),
    deceased = c("yes", rep("no", 4)))
books <- data.frame(
    name = I(c("Tukey", "Venables", "Tierney",
             "Ripley", "Ripley", "McNeil", "R Core")),
    title = c("Exploratory Data Analysis",
              "Modern Applied Statistics ...",
              "LISP-STAT",
              "Spatial Statistics", "Stochastic Simulation",
              "Interactive Data Analysis",
              "An Introduction to R"),
    other.author = c(NA, "Ripley", NA, NA, NA, NA,
                     "Venables & Smith"))

如果要实现类似sql里面的inner join 功能,则用代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name")
如果要实现left join功能则用代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.x=TRUE)
right join功能代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.y=TRUE)
all join功能代码
m1 <- merge(authors, books, by.x = "surname", by.y = "name",all=TRUE)

关于单变量匹配的总结就是这些,但对于多变量匹配呢,例如下面两个表,需要对k1,k2两个变量都相等的情况下匹配
x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)
y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5)

匹配代码如下merge(x, y, by = c("k1","k2"))  #inner join

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-10-6 12:08:06
haohaohaohaohaohaohao
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-10-6 14:20:26
请问一下I 函数到底啥意思,看了下帮助没怎么看明白。谢谢楼主啦。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-10-6 15:07:52
李骥北 发表于 2014-10-6 14:20
请问一下I 函数到底啥意思,看了下帮助没怎么看明白。谢谢楼主啦。
I函数用于两个地方,一个是数据框建立时,可以保证字符型的向量不被转化为“因子”类型,另一个就是在公式建立的时候。在建立数据框之后,你可以对数据框用str函数看下加I的时候和不加I的时候,字符变量的区别,一个是字符型,一个是因子类型
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-10-6 15:37:05
李会超 发表于 2014-10-6 15:07
I函数用于两个地方,一个是数据框建立时,可以保证字符型的向量不被转化为“因子”类型,另一个就是在公式 ...
谢谢啦,一直对类型那些搞不明白。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-10-6 15:53:07
李骥北 发表于 2014-10-6 15:37
谢谢啦,一直对类型那些搞不明白。
> aaa=factor(c('a','b','c'))
> c(aaa[1],aaa[3])
[1] 1 3
> class(c(aaa[1],aaa[3]))
[1] "integer"
这就是因子类型的讨厌之处,本来好好的字符变量被变成数字了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群