[英]R: Select Rows from Data Frame based on condition
我有以下數據框
用戶詳細信息:
+-------------+-----------+-----------+
| 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 ="
我對T.Ciffréo的答案進行了一些更改,並找到了解決方案:
User_details[User_details$Name==as.character(User_transaction_Count[which.max(User_transaction_Count$Frequency),]$Name),]
要確定具有最高頻率的用戶,我們可以使用:
with(User_Transaction_Count,Name[[which.max(Frequency)]])
但是,如果“ User
列使用factor()
數據類型(通常是默認值),則需要將其轉換為用於查找的字符串。 否則,一個data.frame
“ John Doe”的內部值可能與另一個data.frame
中的“ 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
碼:
User_details[User_details$Name==User_transaction_Count[max(User_transaction_Count$Frequency),]$Name,]$Name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.