[英]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 的任何東西都應歸類為“牛”,其他所有東西都應歸類為“鹿”。
您可以嘗試以下步驟:
您可以直接在 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.