Использование значения в 1 столбце для заполнения значений в 2 других столбцах - PullRequest
1 голос
/ 28 апреля 2020

При вводе данных о поведении в другой системе я писал предметы в такой форме, как 3-2 (что означает ранг 3 - ранг 2). Я экспортировал их в Excel, который принял эти записи как даты (поэтому 2 марта для этого примера).

У меня сейчас тысячи записей в этом формате. Я добавил два столбца («Актер» и «Получатель») и хотел бы заполнить их номерами ранга, основываясь на том, что находится в столбце «Тема».

Несколько строк того, что я Я надеюсь, что мой вывод R даст мне:

Subject Actor Recipient 
2-Mar   3     2
5-Jun   6     5
6-Feb   2     6

et c.

Так что у меня уже есть столбцы "Тема" и мне нужна помощь в определении кода для заполнения " Актер "и" Получатель "столбцы. Только ранговые номера go до 6.

Я пробовал несколько вещей, но просто продолжаю получать сообщения об ошибках ... Любая помощь с этим будет С благодарностью!

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Здесь вы можете использовать tstrsplit() после преобразования в формат даты

# Recreate your data
x <- data.frame("Subject" = c("2-Mar", "5-Jun", "6-Feb"))

# Change the format of your Subject coumn
x[, "Subject"] <- format(as.POSIXct(x[, "Subject"], format = "%d-%b"), "%m %d")

# Split into the two strings
library(data.table) # to get tstrsplit() function
x[, c("Actor", "Recipient")] <- tstrsplit(x[, "Subject"], " ")

# Convert to numeric
x[, "Actor"] <- as.numeric(x[, "Actor"])
x[, "Recipient"] <- as.numeric(x[, "Recipient"])

Возвращает

> x
  Subject Actor Recipient
1   02 03     3         2
2   05 06     6         5
3   06 02     2         6

И если вы хотите, чтобы Тема в исходном формате

# Return Subject to original format
x[, "Subject"] <- format(as.POSIXct(x[, "Subject"], format = "%m %d"), "%d-%b")

Предоставление

> x
  Subject Actor Recipient
1  02-Mar     3         2
2  05-Jun     6         5
3  06-Feb     2         6

Объяснено:

Ваш вектор / переменная "Тема" был импортирован как символьный тип atomi c vector (атомы c векторы - это одномерная структура одного или нескольких элементов, где все элементы должны быть одинакового типа ). Решение состояло в том, чтобы преобразовать то, что R будет интерпретировать как дату, используя функцию as.POSIXct(..., format = "..."), где format сообщает R, как форматируется строка ( см. Коды здесь ). Затем я завернул это в функцию format(), сказав, что нужно изменить формат на цифру c месяцев. Затем он был разделен на два столбца с помощью функции tstrsplit(), но R интерпретировал их как данные символьного типа, поэтому я преобразовал их с помощью функции as.numeric() в данные double -типа.

0 голосов
/ 28 апреля 2020

Вы можете преобразовать Subject в дату и извлечь из нее месяц и год.

temp <- as.Date(df$Subject, "%d-%b")
df$Actor <- as.integer(format(temp, "%m"))
df$Recipient <- as.integer(format(temp, "%d"))
df

#  Subject Actor Recipient
#1   2-Mar     3         2
#2   5-Jun     6         5
#3   6-Feb     2         6

Это также можно сделать с помощью функций lubridate.

df$Actor <- month(temp)
df$Recipient <- day(temp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...