我有一个包含user_id
和product_id
的数据框A.我有另一个数据框B
,其中包含product_id
和tags_id
。每个产品都与一些标签相关联。我创建了一个矩阵C
,其中包含所有用户的用户ID作为行名称和标记ID作为列名称,每个单元格最初都填充了零。我想要做的是遍历A
的每一行并相应地填充C
。
例如 - 假设我在user_id = 001
的第一行遇到product_id = 101
和A
。现在,我在B
中搜索与产品101关联的所有标签。让它们分别为201和202.当我在B
中遇到标记时,我想在1
的{{1}}行和tag_id_201
tag_id_202
中增加user_id_001
{1}}。我希望在C
中遇到的每一行都这样做。还应注意,在A
中,A
可以重复多次与不同的user_id
相关联。
我可以应用嵌套for循环来实现这一点。
product_id
但嵌套循环的事情是他们在R中花了很多时间。是否有时间有效的方法呢?另外,我在if语句中收到错误(" for(i in 1:nrow(A)) #Looping through every entry in A
{for(j in 1:nrow(C))#Looping through every row in C to find the correct user_id
{for(k in 1:nrow(B))#Looping through every row in B to find the appropriate tags for for a particular product
{for(l in 1:ncol(C))#Looping through every column in C to find the relevant tag_id according to the tag_id in the upper loop
{if((A$user_id[i] == rownames(C)[j])&(A$product_id[i] == B$product_id[k]) & (B$tag_id[k] == colnames(C)[l]))
C[j, l] <- C[j, l] + 1
}}}}
&#34;)。
修改:我上传了example。
答案 0 :(得分:1)
我认为您正在尝试在数据库语言中执行所谓的连接。在R中,您可以通过使用merge()
来实现join<-merge(A,B,by="product_id")
这将返回一个包含两列的data.frame。 user_id中的第一列,第二列是tag_id。 (我认为product_id也作为第三列出现,但对于手头的问题并不重要。)
现在,使用此data.frame,您可以使用table()来计算每对(user_id,tag_id)出现此新data.frame的次数。
output<-table(join$user_id,join$tag_id)
那应该给你一个非常类似你所描述的矩阵C的矩阵。
答案 1 :(得分:0)
与@JMenezes一样,我建议使用import Events from 'react-native-simple-events';
export function login(email, password) {
Events.trigger('LoginSuccess', 'response');
}
和import React, { Component, } from 'react'
import {
View,
Text,
} from 'react-native'
import Events from 'react-native-simple-events';
import * as request from '../../network/ApiRequest'
class LoginScreen extends Component {
static propTypes = {}
static defaultProps = {}
constructor(props) {
super(props)
this.state = {
status: "new"
}
}
componentDidMount() {
Events.on('LoginSuccess', 'myID', this.onLoginSuccess);
request.login("abc","def")
}
componentWillUnmount() {
Events.rm('LoginSuccess', 'myID');
}
onLoginSuccess(data){
this.setState({ //=>error here
status : "done"
});
}
render() {
return (
<View>
<Text>
{this.state.status}
</Text>
</View>
)
}
}
。我写了一个小例子:
merge
编辑:我更改了答案以适合Ronnie Days示例(https://imgur.com/a/Uf9Tx)。之前设置table
和A <- data.frame(user_id = c(1, 1, 1, 2, 2, 2),
product_id = c(201, 202, 203, 201, 202, 210))
B <- data.frame(product_id = c(201, 201, 201, 202, 202, 202, 203, 203, 203, 210),
tags_id = c(301, 302, 303, 301, 302, 309, 301, 309, 303, 303))
C <- matrix(NA, nrow = length(unique(A$user_id)), ncol = length(unique(B$tags_id)))
rownames(C) <- unique(A$user_id)
colnames(C) <- unique(B$tags_id)
C <- as.data.frame(C)
D <- merge(A, B)
for(i in unique(A$user_id)){
tab <- table(subset(D, user_id == i)$tags_id)
C[as.character(i), names(tab)] <- tab
}
的代码是:
A