簡體   English   中英

如何根據 R 中的現有因子列添加和填充新列?

[英]How can I add and populate a new column based on an existing factor column in R?

- 我想添加一個 Species 列,並根據 Id(一個因子列)使用“鹿”或“牛”填充該列。

- 我的動物 ID 是 A 或 B,然后是牛的 628-637 和鹿的 80000 以上(例如,A628、A82117)。

- Id 低於 1000、A 或 B 的任何東西都應歸類為“牛”,其他所有東西都應歸類為“鹿”。

樣本數據

您可以嘗試以下步驟:

  • 獲取 Id 的子字符串以提取數字部分
  • 將子字符串轉換為數字
  • 使用數值生成動物類型列

您可以直接在 R 中完成(如果 ids 表示為因子列):

ids <- factor(c('A630','B81000','A1200','B626'))
type <- unlist(lapply(ids, function(x) ifelse(as.numeric(substr(as.character(x), 2, nchar(as.character(x))))<1000, 'cow', 'deer')))
animals <- data.frame(ids=ids, type=factor(type))
is.factor(animals$type)
animals

您還可以使用以下 SQL 代碼在數據庫中准備數據:

CREATE TABLE ANIMALS
(
 ID VARCHAR(6)
);

INSERT INTO ANIMALS VALUES ('A628');
INSERT INTO ANIMALS VALUES ('A81000');
 
SELECT 
 ID,
 CASE WHEN CAST(SUBSTR(ID,2,LENGTH(ID)-1) as decimal) < 1000 THEN 'COW' ELSE 'DEER' END AS TYPE
FROM ANIMALS A;

您還可以創建一個包含兩列的新表:

CREATE TABLE CLASSIFIED_ANIMALS AS
SELECT 
  ID,
  CASE WHEN CAST(SUBSTR(ID,2,LENGTH(ID)-1) as decimal) < 1000 THEN 'CAW' ELSE 'DEER' END as TYPE
FROM ANIMALS A;

dplyr

df %>%
  mutate(animals = as.numeric(sub("A|B(\\d+).*", "\\1", ids)),
         animals = ifelse(animals > 600 & animals < 80000, "cow", "deer"))
     ids animals
1   A628     cow
2 B82117    deer
3  A1200     cow
4   B626     cow
5 B80007    deer

這是如何工作的:

  • 首先,我們使用反向引用\\\\1提取ids列的數字部分並將其轉換為數字類型
  • 然后我們運行一個簡單的ifelse比較來分配標簽

數據:

df <- data.frame(
  ids = factor(c('A628','B82117','A1200','B626', 'B80007'))
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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