d*****g 发帖数: 4081 | 1 在R里 我有两个matrix A(n列数,其中一个假设是data吧) 和 B (B有两列数 1 和2
吧)
我现在想比较A的一列data和B的一列1的数据
如果相等的话, 就把B的第二列2中的数据合并到A的matrix里
怎么搞呢???????? |
q**j 发帖数: 10612 | 2 发信人: statcompute (statcompute), 信区: Statistics
标 题: Re: How to compute sum of revenue for each day each person in
发信站: BBS 未名空间站 (Fri May 22 23:55:47 2009)
well, you can use "proc sql" in R as well ^_^.
take a look at sqldf package http://code.google.com/p/sqldf/.
和2
【在 d*****g 的大作中提到】 : 在R里 我有两个matrix A(n列数,其中一个假设是data吧) 和 B (B有两列数 1 和2 : 吧) : 我现在想比较A的一列data和B的一列1的数据 : 如果相等的话, 就把B的第二列2中的数据合并到A的matrix里 : 怎么搞呢????????
|
d*****g 发帖数: 4081 | 3 看起来很复杂啊,我才接触R几天,有没有非常简单的办法呢??谢谢!! |
q**j 发帖数: 10612 | 4 if you need to do "many-to-many" merge, no.
or you can write a function and use apply() for each element of the A matrix
. But that is very inefficient. Investing in SQL is much beneficial in the l
ong run.
【在 d*****g 的大作中提到】 : 看起来很复杂啊,我才接触R几天,有没有非常简单的办法呢??谢谢!!
|
d*****g 发帖数: 4081 | 5 高手,是不是你给我的网页第四个例子的最后一个 animal marker
不过这个例子看起来简单了些,我有很多数据
还有 像这个例子这样写,能比较数据大小 找出一样的值的么?
sqldf("select * from SNP4 left join SNP1x using (Animal, Marker)") |
q**j 发帖数: 10612 | 6 i am not high hand :(
SQL can do almost everything you want to do. so answer to your questions are
"yes".
if you have a huge amount of data, then proably R is not good enough. But yo
u have to decide this for yourself.
【在 d*****g 的大作中提到】 : 高手,是不是你给我的网页第四个例子的最后一个 animal marker : 不过这个例子看起来简单了些,我有很多数据 : 还有 像这个例子这样写,能比较数据大小 找出一样的值的么? : sqldf("select * from SNP4 left join SNP1x using (Animal, Marker)")
|
s*r 发帖数: 2757 | 7 it seems very easy
give 2 3*3 matrix with column names ba
和2
【在 d*****g 的大作中提到】 : 在R里 我有两个matrix A(n列数,其中一个假设是data吧) 和 B (B有两列数 1 和2 : 吧) : 我现在想比较A的一列data和B的一列1的数据 : 如果相等的话, 就把B的第二列2中的数据合并到A的matrix里 : 怎么搞呢????????
|
d*****g 发帖数: 4081 | 8 比如我的结构是这样的
> A
1 2 3 4 5
2 4 2 4 1
1 4 5 6 7
1 2 3 5 9
8 6 2 4 3
> B
7 3
5 1
我用刚才上面的语句
sqldf("select * from A left join B using (A$V5, B$V1)")
能得到以下结果么?
1 2 3 4 5 1
2 4 2 4 1 NA
1 4 5 6 7 3
1 2 3 5 9 NA
8 6 2 4 3 NA |
q**j 发帖数: 10612 | 9 piece of cake.
【在 d*****g 的大作中提到】 : 比如我的结构是这样的 : > A : 1 2 3 4 5 : 2 4 2 4 1 : 1 4 5 6 7 : 1 2 3 5 9 : 8 6 2 4 3 : > B : 7 3 : 5 1
|
s*r 发帖数: 2757 | 10 nod
pie of cake
i will take it after i finish my dinner
【在 q**j 的大作中提到】 : piece of cake.
|
|
|
s*****n 发帖数: 2174 | 11 用 merge(), 非常简单.
【在 d*****g 的大作中提到】 : 比如我的结构是这样的 : > A : 1 2 3 4 5 : 2 4 2 4 1 : 1 4 5 6 7 : 1 2 3 5 9 : 8 6 2 4 3 : > B : 7 3 : 5 1
|
d*****g 发帖数: 4081 | 12 merge()怎么写? 太感谢了~~!~~~~~~ |
s*****n 发帖数: 2174 | 13 比如:
A <- data.frame(matrix(1:20, ncol=4))
B <- data.frame(Y1=c(13,11), Y2=c(5,8))
merge(A,B, by.x = "X3", by.y = "Y1", all.x = T)
【在 d*****g 的大作中提到】 : merge()怎么写? 太感谢了~~!~~~~~~
|
d*****g 发帖数: 4081 | 14 merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"), ...)
merge里面哪个部分我能换成merge的条件
就是A$V5==B$V1 |
d*****g 发帖数: 4081 | 15 哈哈 songkun!!谢谢 我试试先 一会搞不定还得请大家帮助,我是搞ee的完全不懂R
啊 |
s*****n 发帖数: 2174 | 16 by.x 是左边data 的 match key
by.y 是右边data 的 match key
all.x = T, 表示左边data 如果match 不上也保留, 相当于 left join 的作用
【在 d*****g 的大作中提到】 : merge(x, y, by = intersect(names(x), names(y)), : by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, : sort = TRUE, suffixes = c(".x",".y"), ...) : merge里面哪个部分我能换成merge的条件 : 就是A$V5==B$V1
|
d*****g 发帖数: 4081 | 17 > KANS_ALL <- read.table("f:/KANS_ALL.txt" )
> ASBB <- read.table("f:/ASBB.txt" )
> NEW <- merge(KANS_ALL,ASBB, by.KANS_ALL = "srcas", by.ASBB = "as", all.x =
T)
错误: 无法分配大小为203.9 Mb的矢量
咋回事儿呢? |
s*****n 发帖数: 2174 | 18 内存不够用.
rm(list=ls())
memory.limit(3000) ## 假如你有3G内存
然后再run试试看.
还有, by.x 和 by.y 不用改名字.
all.x 也不用改名.
=
【在 d*****g 的大作中提到】 : > KANS_ALL <- read.table("f:/KANS_ALL.txt" ) : > ASBB <- read.table("f:/ASBB.txt" ) : > NEW <- merge(KANS_ALL,ASBB, by.KANS_ALL = "srcas", by.ASBB = "as", all.x = : T) : 错误: 无法分配大小为203.9 Mb的矢量 : 咋回事儿呢?
|
d*****g 发帖数: 4081 | 19 > KANS_ALL <- read.table("f:/KANS_ALL.txt" )
> ASBB <- read.table("f:/ASBB.txt" )
> NEW <- merge(KANS_ALL,ASBB, by.KANS_ALL = "srcas", by.ASBB = "as", all.x =
T)
错误: 无法分配大小为203.9 Mb的矢量
咋回事儿呢? |
f***a 发帖数: 329 | 20 set.seed(123)
A <- matrix(sample(1:11,20,replace=T),4,)
B <- matrix(c(1:10,sample(1:10,10)),,2)
comp <- function(t){
B[is.element(B[,1],t),2]
}
apply(A,1,comp) |
|
|
f***a 发帖数: 329 | 21 昨天蒙songkun大大指点把apply(),outer()又搞通了点,现在正好应用下,呵呵~~~不
过还是merge()方便。 |
d*****g 发帖数: 4081 | 22 > KANS_ALL <- read.table("f:/KANS_ALL.txt" )
> ASBB <- read.table("f:/ASBB.txt" )
> NEW <- merge(KANS_ALL,ASBB, by.KANS_ALL = "srcas", by.ASBB = "as", all.x =
T)
错误: 无法分配大小为203.9 Mb的矢量
咋回事儿呢? |
m*****n 发帖数: 3575 | 23 有那么麻烦吗?
A[,1]就是A第一列的数据吧? |
d*****g 发帖数: 4081 | |
d*****g 发帖数: 4081 | |
s*r 发帖数: 2757 | 26 only need half a line with match()
> a
V1 V2 V3 V4 V5
1 1 2 3 4 5
2 2 4 2 4 1
3 1 4 5 6 7
4 1 2 3 5 9
5 8 6 2 4 3
> b
[,1] [,2]
[1,] 7 3
[2,] 5 1
> a$V6 <- b[match(a$V5, b[,1]),2]
> a
V1 V2 V3 V4 V5 V6
1 1 2 3 4 5 1
2 2 4 2 4 1 NA
3 1 4 5 6 7 3
4 1 2 3 5 9 NA
5 8 6 2 4 3 NA
【在 d*****g 的大作中提到】 : 比如我的结构是这样的 : > A : 1 2 3 4 5 : 2 4 2 4 1 : 1 4 5 6 7 : 1 2 3 5 9 : 8 6 2 4 3 : > B : 7 3 : 5 1
|
s*****n 发帖数: 2174 | 27 match() 在有重复元素的情况下, 会只保留第一个match的.
这点上和merge()不一样.
没有重复元素的情况下, 效果和merge()一样.
【在 s*r 的大作中提到】 : only need half a line with match() : > a : V1 V2 V3 V4 V5 : 1 1 2 3 4 5 : 2 2 4 2 4 1 : 3 1 4 5 6 7 : 4 1 2 3 5 9 : 5 8 6 2 4 3 : > b : [,1] [,2]
|
s*r 发帖数: 2757 | 28 o thx
【在 s*****n 的大作中提到】 : match() 在有重复元素的情况下, 会只保留第一个match的. : 这点上和merge()不一样. : 没有重复元素的情况下, 效果和merge()一样.
|