我有以下数据帧
用户详细信息:
+-------------+-----------+-----------+
| Name | Address | Phone |
+-------------+-----------+-----------+
| John Doe | Somewhere | 123456789 |
| Jane Doe | Somewhere | 234567891 |
| Jack Russel | Somewhere | 234567891 |
+-------------+-----------+-----------+
User_Transaction_Count:
+-------------+-----------+
| Name | Frequency |
+-------------+-----------+
| John Doe | 2 |
| Jane Doe | 5 |
| Jack Russel | 2 |
+-------------+-----------+
我要做的是获取交易最多的用户的详细信息。 因此,在上述情况下,Jane Doe的交易最多,因此我需要将其详细信息提取到数据框中。
我尝试了以下代码:
User_details[which(user_details$Name = User_Transaction_Count[(which.max(User_Transaction_Count$Frequency)),]$Name)]
但是我得到这个错误:
Error: unexpected '=' in "ad_maxState <- accidental_deaths[which(accidental_deaths$State ="
答案 0 :(得分:0)
我对T.Ciffréo的答案做了一些更改,并找到了解决方案:
User_details[User_details$Name==as.character(User_transaction_Count[which.max(User_transaction_Count$Frequency),]$Name),]
答案 1 :(得分:0)
要确定具有最高频率的用户,我们可以使用:
with(User_Transaction_Count,Name[[which.max(Frequency)]])
但是,如果User
列使用的是factor()
数据类型(通常是默认值),则需要将其转换为用于查找的字符串。否则,一个data.frame
中“ John Doe”的内部值可能与另一个中的“ John Doe”的内部值不同。
maxUser <- as.character(with(User_Transaction_Count,Name[[which.max(Frequency)]]))
然后,我们可以在另一个data.frame
中执行查找。
result <- User_Details[User_Details$Name == maxUser,]
如果表很大,这可能需要很长时间,因此最好为此创建一个索引
#build index
library(hash)
userIdx <- hash(as.character(User_Details$Name),1:nrow(User_Details))
#use index
maxUser <- as.character(with(User_Transaction_Count,Name[[which.max(Frequency)]]))
result <- User_Details[userIdx[[maxUser]],]
输出:
> result
Name Address Phone
2 Jane Doe Somewhere 234567891
答案 2 :(得分:-1)
代码:
User_details[User_details$Name==User_transaction_Count[max(User_transaction_Count$Frequency),]$Name,]$Name