簡體   English   中英

R:根據條件從數據框中選擇行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM