Заменить целые числа в столбце фрейма данных другими целыми числами в R?

Я хочу заменить вектор в фрейме данных, который содержит только 4 числа, на определенные числа, как показано ниже.

tt <- rep(c(1,2,3,4), each = 10)
df <- data.frame(tt)

хочу заменить 1 = 10; 2 = 200, 3 = 458, 4 = -0.1

Мне любопытно: какой результат вы ожидаете от rep(c(rep(1,2,3,4), each = 10))?

John Garland 18.05.2022 01:53

@JohnGarland Мой плохой. Исправил это сейчас

Biotechgeek 18.05.2022 01:56

ОК ... оттуда это легко!

John Garland 18.05.2022 02:01
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
23
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

1) Чтобы исправить ошибку в коде вопроса и предоставить более короткий пример, мы используем ввод в примечании в конце. Чтобы получить результат, поскольку ввод от 1 до 4, мы можем использовать индексацию:

nos <- c(10, 200, 458, -0.1)
transform(df, tt = nos[tt])
##      tt
## 1  10.0
## 2  10.0
## 3 200.0
## 4 200.0
## 5 458.0
## 6 458.0
## 7  -0.1
## 8  -0.1

2) Другой подход заключается в использовании арифметики:

transform(df, tt = 10 * (tt == 1) + 
                   200 * (tt == 2) + 
                   458 * (tt == 3) +
                   -0.1 * (tt == 4))

3) Это также сработает:

transform(df, tt = c(outer(tt, 1:4, `==`) %*% nos))

Примечание

df <- data.frame(tt = c(1, 1, 2, 2, 3, 3, 4, 4))
Ответ принят как подходящий

Вы можете использовать recode из dplyr. Обратите внимание, что старые значения записываются как символы. И новые значения являются целыми числами, поскольку исходный столбец был целым числом:

library(tidyverse):
df %>% 
   mutate(tt = recode(tt, '1'= 10, '2' = 200, '3' = 458, '4' = -0.1))

     tt
1  10.0
2  10.0
3 200.0
4 200.0
5 458.0
6 458.0
7  -0.1
8  -0.1

В то время как индекс и арифметические параметры довольно элегантны для этого случая, ЭТО обычно полезное решение!

John Garland 18.05.2022 03:02

Другие вопросы по теме